Конвертировать строку в эпоху - PullRequest
0 голосов
/ 01 октября 2018

У меня есть строка - 20180915 в формате ггггММдд Мне нужно получить миллионы секунд эпохи для этой даты, ответ для 20180915 должен быть 1537012800000

Я смог сделать это, используя следующую функцию -

import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
public static void main(String args[]) throws ParseException {

        String myDate = "2018-09-15 12:00:00";
        LocalDateTime localDateTime = LocalDateTime.parse(myDate,
                DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") );
        System.out.println(localDateTime);
        long millis = localDateTime
                .atZone(ZoneOffset.UTC)
                .toInstant().toEpochMilli();
        System.out.println(millis);
    }

Проблема, с которой я сталкиваюсь, - я передаю строку как «2018-09-15 12:00:00», но я ввожу «20180915».Я не могу найти хороший способ конвертировать "20180915" в "2018-09-15 12:00:00" Как я могу добиться этого?

Ответы [ 3 ]

0 голосов
/ 01 октября 2018

Вы можете заставить DateTimeFormatter делать всю работу, что особенно полезно, если вам нужно проанализировать несколько дат, поскольку это уменьшает количество промежуточных шагов анализа (и созданных объектов):

DateTimeFormatter fmt = new DateTimeFormatterBuilder()
        .appendPattern("uuuuMMdd")
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 12)
        .toFormatter()
        .withZone(ZoneOffset.UTC);

String input = "20180915";
long epochMilli = OffsetDateTime.parse(input, fmt).toInstant().toEpochMilli();
System.out.println(epochMilli); // prints: 1537012800000

Вы можете заменить OffsetDateTime на ZonedDateTime.Не имеет значения для результата.

0 голосов
/ 01 октября 2018

Ответ -

private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");

public static Long getMillisForDate(String date) {
    return LocalDateTime
            .of(LocalDate.parse(date, formatter), LocalTime.NOON)
            .atZone(ZoneOffset.UTC)
            .toInstant().toEpochMilli();
}
0 голосов
/ 01 октября 2018

Разбор даты с правильной маской "ггггМдд"

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date date = format.parse("20180915");
long epochs = date.getTime();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...