将字符串转换为纪元

时间:2018-10-01 19:11:40

标签: java datetime java-8

我有一个字符串-20180915,格式为yyyyMMdd 我需要获得这个日期的毫秒数,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);
    }

我面临的问题是- 我将String传递为“ 2018-09-15 12:00:00”,但我的输入是“ 20180915”。 我找不到将“ 20180915”转换为“ 2018-09-15 12:00:00”的好方法 我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:3)

答案-

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

答案 1 :(得分:2)

您可以使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。不会影响结果。

答案 2 :(得分:0)

使用适当的掩码“ yyyyMMdd”解析日期

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
Date date = format.parse("20180915");
long epochs = date.getTime();