gpt4 book ai didi

java - SimpleDateFormat 似乎忽略了时区

转载 作者:行者123 更新时间:2023-12-02 06:19:38 24 4
gpt4 key购买 nike

我正在尝试格式化日历对象以以特定格式返回时间。但是,SimpleDateFormatter 忽略了 Calendar 对象的 TimeZone 及其自身的 TimeZone 属性,并进行了不必要的时间转换。我的计算机处于 EST,我正在传递“PST”中的日历对象。传入的时间是:Tue Jan 14 10:28:49,我期望返回值为“10:28:49 AM PST”。但是,返回的值是“07:28:49 AM PST”。当格式化程序 obj 设置为 PST 时,为什么要进行时区计算?另外,如何防止 tz 从 EST 转换为 PST?

代码如下:

public static String formatDateToString(Calendar cal) {
if (cal != null) {
TimeZone tz = cal.getTimeZone();
String tzId = tz.getID();**//"PST"**

Date date = cal.getTime();
String str = date.toString();**//"Tue Jan 14 10:28:49 EST 2014"**
final SimpleDateFormat sdFormatter = new SimpleDateFormat("hh:mm:ss a zzz");

sdFormatter.setTimeZone(TimeZone.getTimeZone(tzId));
String calStr = sdFormatter.format(cal.getTime());**//"07:28:49 AM PST"**

return calStr;
}

return null;
}

最佳答案

Calendar#getTime() 实现为 (Oracle JDK7)

public final Date getTime() {
return new Date(getTimeInMillis());
}

因此,无论 CalendarTimeZone 是什么,Date 对象在调用其 toString( 时都将使用系统的默认值) 方法。

美国东部标准时间 (EST) 比太平洋标准时间 (PST) 早 3 小时。

<小时/>

根据代码片段中的注释,

String tzId = tz.getID();**//"PST"**
...
String str = date.toString();**//"Tue Jan 14 10:28:49 EST 2014"**
final SimpleDateFormat sdFormatter = new SimpleDateFormat("hh:mm:ss a zzz");

sdFormatter.setTimeZone(TimeZone.getTimeZone(tzId));
String calStr = sdFormatter.format(cal.getTime());**//"07:28:49 AM PST"**

一切看起来都很好。您正在将 Tue Jan 14 10:28:49 EST 2014 表示的时间格式化为 PST 值。时间本身是完全相同的。表示方式不同。

如果您不想将其显示为 PST,请省略 setTimeZone() 调用。

关于java - SimpleDateFormat 似乎忽略了时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21124599/

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