gpt4 book ai didi

java - 如何从时间戳值获取时区 ID

转载 作者:行者123 更新时间:2023-12-01 16:48:21 24 4
gpt4 key购买 nike

是否可以从某个 TimeStamp 获取 TimeZone ID ?如果是的话请用简单的代码解释一下。

 private String getDate(long timeStamp) {DateFormat objFormatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
TimeZone timeZone = TimeZone.getTimeZone("GMT+4:30");
//Instead of the Above code I want to get the TimeZone ID from my timeStamp objFormatter.setTimeZone(timeZone);
Calendar objCalendar =
Calendar.getInstance(timeZone);
objCalendar.setTimeInMillis(timeStamp * 1000);
String result = objFormatter.format(objCalendar.getTime());
objCalendar.clear();
return result;
}

最佳答案

tl;博士

无法从 UTC 纪元计数中得出偏移量/区域。但您可以调整一个区域。

Instant.ofEpochSecond( yourCount )
.atZone( ZoneId.of( "Pacific/Auckland" ) )

避免从纪元开始计数

首先,避免使用纪元计数来跟踪日期时间值。你的意思是整秒、毫秒、微秒、纳秒还是其他什么?你的意思是Unix/Java epoch 1970-01-01T00:00:00Zcouple dozen other epochs 之一被许多计算机系统使用?

显然你有整秒的时间,我假设是 Unix/Java 纪元。

无法从 count-from-epoch 获取区域

你不能“从某个时间戳获取时区ID”,这是不可能的。您的纪元计数是在考虑特定时区时进行的,通常是 UTC 。如果必须知道创建该纪元计数时使用的预期区域,则无法推断。

也许您的目标实际上是将这个纪元计数调整为特定区域时区的日期时间。继续阅读。

java.time

避免麻烦的旧日期时间类,例如 DateCalendar 现在已被 java.time 类取代。

将纪元计数转换为 UTC 时间轴上的点。

Instant instant = Instant.ofEpochSecond( yourCount ) ;

指定您所需的时区。

指定proper time zone name格式为大洲/地区,如America/Montreal , Africa/Casablanca ,或太平洋/奥克兰。切勿使用 3-4 个字母的缩写,例如 ESTIST,因为它们不是真正的时区,不是标准化的,甚至不是唯一的( !)。

ZoneId z = ZoneId.of( "Asia/Kabul" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

查看此code run live at IdeOne.com .

请注意 4.5 小时的差异,从 02:40 变为 07:10,适合喀 boolean 的时间。这是同一时刻,时区的同一点,但通过不同地区的挂钟时间的镜头观察。

input: 1500000000

instant: 2017-07-14T02:40:00Z

zdt: 2017-07-14T07:10+04:30[Asia/Kabul]

关于java - 如何从时间戳值获取时区 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45406357/

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