toEpochMilli的Java字符串日期时间-不同区域

问题描述 投票:0回答:1

我正在开发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);
}
java timezone epoch region datetime-conversion
1个回答
1
投票

此解决方案在具有相同输出的不同地方工作。

//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);
}
© www.soinside.com 2019 - 2024. All rights reserved.