gpt4 book ai didi

java - 将 UTC 时间戳转换为本地日期

转载 作者:行者123 更新时间:2023-12-02 03:29:48 25 4
gpt4 key购买 nike

所以我现在尝试了大约几个小时将时间戳转换为本地日期(CEST)。

     Date date = new Date(stamp*1000);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("CEST"));
String myDate = simpleDateFormat.format(date);

无论我在互联网上尝试和查找什么方法都不起作用,我总是得到 UTC 时间......

为了更好地理解:stamp是一个类型为long的变量时间戳,我将从服务接收

最佳答案

tl;博士

String output = ZonedDateTime.ofInstant ( Instant.ofEpochSecond ( 1_468_015_200L ) , ZoneId.of ( "Europe/Paris" ) ).toString();

详细信息

几个问题:

  • 您没有使用proper time zone names
    • 专有名称采用大陆/地区格式。
    • 媒体中常见的 3-4 个字母缩写(例如 CEST)不是真正的时区。 避免它们。它们既不是标准化的也不是唯一的(!)。
  • 您正在使用旧的过时的日期时间类,这些类设计不佳且令人困惑。它们已被 java.time 取代框架。

如果您所说的 CEST 是指夏季比 UTC 早 2 小时,那么我们就以 Europe/Paris 为例。作为时区的示例。您的问题缺少示例数据,因此我将弥补这个示例。

显然,您的输入是从 UTC 1970 年第一个时刻开始的整秒数。该值可以直接使用,无需相乘。

ZoneId 类表示时区。 Instant 是 UTC 时间线上的一个点,分辨率高达纳秒。 ZonedDateTime 是调整到ZoneId 中的Instant

ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
long input = 1_468_015_200L; // Whole seconds since start of 1970.
Instant instant = Instant.ofEpochSecond ( input );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );

转储到控制台。

System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt );

input: 1468015200 | instant: 2016-07-08T22:00:00Z | zdt: 2016-07-09T00:00+02:00[Europe/Paris]

关于java - 将 UTC 时间戳转换为本地日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38268314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com