преобразовать строку даты в массив целых чисел - PullRequest
2 голосов
/ 16 марта 2020

У меня есть строка в формате: «ГГГГ-ММ-ДД», и я хочу преобразовать ее в массив целых чисел

, это мой код:

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].

Ответы [ 3 ]

5 голосов
/ 16 марта 2020

Во-первых, я бы сказал, использовать LocalDate , DateTimeFormatter из java -time API и прекратить использование Календарь и SimpleDateFormat унаследованный класс дат

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

Если вы хотите преобразовать строку даты в массив int, тогда split будет основан на -.

Integer[] array = 
    Arrays
    .stream( dateString.split("-") )
    .map( Integer::valueOf )
    .toArray( Integer[]::new )
;
1 голос
/ 16 марта 2020

Это имеет смысл, если все ваши даты были предварительно отформатированы, как описано в вашем вопросе. Но если вы используете объекты даты, я бы воспользовался возможностями 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]

Еще одним преимуществом этого является то, что вам не нужно следить за тем, чтобы формат совпадал с даты на дату.

0 голосов
/ 16 марта 2020

Это очень быстро и просто. Если вы обязаны использовать массив, решение => импортировать эти =>

    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]);
    }

должно это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...