datetime如何使用java将带有可选时间的日期时间输入字符串转换为UNIX时间。时间
我正在使用java。将日期时间转换为unix时间的时间,但当输入格式不同时,结果并不总是正确的。在下面的代码中,输出不正确。它将“2016-06-21-10-19-22”转换为2016-06-21T00:00:00+00:00
如果输入为“2016年4月28日”、“年月日”,则结果正确
我想知道如何编写一个函数,它可以将带时间的日期和不带时间的日期转换为正确的timeInSeconds
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
"yyyy-MM-dd-HH-mm-ss");
String dateTimeString = "2016-06-21-10-19-22";
LocalDate date = LocalDate.parse(dateTimeString, formatter);
ZonedDateTime resultado = date.atStartOfDay(ZoneId.of("UTC"));
Instant i = resultado.toInstant();
long timeInSeconds = i.getEpochSecond();
int nanoAdjustment = i.getNano();
System.out.println("" + timeInSeconds + " seconds " + nanoAdjustment + " nanoseconds");//1466467200 seconds 0 nanoseconds
# 1 楼答案
您的代码中存在多个问题,让我逐一列出
LocalDate
后,始终将其转换为ZoneDateTime,一天的开始时间为00:00:00
ZonedDateTime
转换为Instant,这就是为什么总是得到相同的结果实现这个问题的最佳方法是在格式化程序中使用带有可选时间表示的DateTimeFormatter,并使用parseBest