我有一个字符串-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”的好方法 我怎样才能做到这一点?
答案 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();