【问题标题】:convert Date string to array of integers将日期字符串转换为整数数组
【发布时间】:2020-06-27 02:45:01
【问题描述】:

我有一个格式为“YYYY-MM-DD”的字符串,我想将其转换为整数数组

这是我的代码:

int year, month, day;
Date date = Calendar.getInstance().getTime();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String strDate = dateFormat.format(date);

例如,如果日期是 2017-03-16,我希望我的数组类似于 [2017,3,16]。

【问题讨论】:

  • 老实说,我会从 LocalDate 开始,然后使用它的 getter 来填充数组 - 或者更好的是,继续使用 LocalDate 的实例
  • int year, month, day; 不是整数数组。

标签: java string date


【解决方案1】:

首先我会说使用java-time API 中的LocalDateDateTimeFormatter 并停止使用CalendarSimpleDateFormat 旧日期类

LocalDate currentDate = LocalDate.now();
String dateString = currentDate.format(DateTimeFormatter.ISO_DATE);

如果要将日期字符串转换为int数组,则拆分基于-

Integer[] array = 
    Arrays
    .stream( dateString.split("-") )
    .map( Integer::valueOf )
    .toArray( Integer[]::new )
;

【讨论】:

  • 除此之外:不要使用旧类 DateSimpleDateFormat。使用java.time,它比旧的东西更健壮并且有更好的api设计。
【解决方案2】:

如果您的所有日期都按照您的问题中的描述进行了预格式化,那么这是有道理的。但如果您使用的是日期对象,我会利用 Java 8+ 的功能。

首先,定义一个lambda 来提取部分并返回一个数组。请注意,您可以添加其他日期组件或轻松更改数组中的顺序。

        Function<LocalDate, int[]> getParts =
                ld -> new int[] { ld.getDayOfMonth(),
                        ld.getMonthValue(), ld.getYear() };

那么你就可以这样应用了。

        LocalDate d = LocalDate.of(2020, 3, 15);
        int[] parts = getParts.apply(d);
        System.out.println(Arrays.toString(parts));

打印

[15, 3, 2020]

或者这个

        // create a list of LocalDate objects.
        List<LocalDate> localDates = List.of(
        LocalDate.of(2020, 3, 15), LocalDate.of(2020, 3, 16));
        // and convert to a list of arrays of date attributes.
        List<int[]> dates = localDates.stream().map(getParts::apply)
                  .collect(Collectors.toList());
        dates.forEach(a->System.out.println(Arrays.toString(a)));

打印

[15, 3, 2020]
[16, 3, 2020]

这样做的另一个好处是您不必确保格式从日期到日期都是相同的。

【讨论】:

  • 在大多数情况下,这将是我的首选(尽管我也赞成其他答案)。
【解决方案3】:

它非常快速和容易。如果您一定要使用数组,则解决方案 => 导入这些=>

    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Calendar;
    import java.util.Date;

然后在您的主要方法或其他方法中 =>

    int[] dateArray = new int[100]; // or your desired size

    Date date = Calendar.getInstance().getTime();
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    String strDate = dateFormat.format(date);

    String[] line = strDate.split("-");

    for (int i = 0; i < line.length; i++)
    {
        dateArray[i] = Integer.parseInt(line[i]);
    }

应该这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 2017-09-19
    • 2014-02-02
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多