我正在开发toEpochMilli()的字符串转换方法。但是,当我在其他时区区域服务器上发布代码时,得到的结果却不同。如何解决?
//input = "2019-12-26T00:00:00"
private static Long converter(String stringDate) {
try {
LocalDateTime dateTime = LocalDateTime.parse(stringDate, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));
ZoneId zoneId = ZoneId.of("America/Sao_Paulo");
return dateTime.atZone(zoneId).toInstant().toEpochMilli();
} catch (DateTimeParseException dte) {
throw new DateException("Invalid input format", dte);
}
}
[圣保罗的输出将转换为LocalDateTime,获得与输入相同的结果,但是北弗吉尼亚州的输出将转换为LocalDateTime,从输入中获得不同的结果。
public static String backConverter(Long epochMilli) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.of("America/Sao_Paulo"));
return DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").format(localDateTime);
}
此解决方案在具有相同输出的不同地方工作。
//input = "2019-12-26T00:00:00"
private static Long converter(String stringDate) {
try {
LocalDateTime dateTime = LocalDateTime.parse(stringDate, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"));
ZoneId zoneId = ZoneId.systemDefault();
return dateTime.atZone(zoneId).toInstant().toEpochMilli();
} catch (DateTimeParseException dte) {
throw new DateException("Invalid input format", dte);
}
}
public static String backConverter(Long epochMilli) {
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochMilli), ZoneId.systemDefault());
return DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss").format(localDateTime);
}