gpt4 book ai didi

java - 通过日期字符串获取其他TimeZone的时间,结果错误

转载 作者:搜寻专家 更新时间:2023-10-31 20:02:26 31 4
gpt4 key购买 nike

我只有一个日期字符串,我想通过它查看其他时区的时间。所以我这样做了:

    String dateStr = "2014-05-15 16:14:58 PM";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("America/Denver"));
Date date = sdf.parse(dateStr);
System.out.println(date);

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
System.out.println(sdf1.format(date));

这是我电脑中的当前时区:

enter image description here

代码运行的结果是:

 Fri May 16 06:14:58 CST 2014

2014-05-16 06:14:58 AM

结果是错误的,我通过在我的计算机中将 TimeZone 更改为“America/Denver”得到了正确的结果,我看到了:

America/Denver —— 2014-05-15 02:14:58 AM

不知道为什么会这样?

但是如果我有一个日期而不是一个日期字符串,我会这样做:

public static String getFormatedDateString(String _timeZone) {
TimeZone timeZone = null;
if (StringUtils.isEmpty(_timeZone)) {
timeZone = TimeZone.getDefault();
} else {
timeZone = TimeZone.getTimeZone(_timeZone);
}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf.setTimeZone(timeZone);
// TimeZone.setDefault(timeZone);
return sdf.format(new Date());
}

System.out.println("美国/丹佛——"+ getFormatedDateString("美国/丹佛"));

结果是这样的:

------Asia/Shanghai------
2014-05-15 16:32:04 PM (current date)
America/Denver —— 2014-05-15 02:32:04 AM

这个结果是对的。

所以我很困惑,当我只有一个日期字符串并且我想知道其他时区的时间时,我找不到问题。任何人都可以帮助我吗?

最佳答案

    Java中的
  1. Date对象是独立于时区概念的。
  2. 您想做的是获取日期字符串在另一个时区的等效时间,该日期字符串“应该”在您自己的时区。

但是,第二点在您的代码中向后出现:

String dateStr = "2014-05-15 16:14:58 PM";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf.setTimeZone(TimeZone.getTimeZone("America/Denver"));
Date date = sdf.parse(dateStr);

这 4 行所做的是将日期字符串视为“美国/丹佛”时区中的一个时间点。

当您将它解析为日期对象时,它会为您提供您所在时区的等效时间。

反之亦然:

因此与您的代码保持接近(您可以有效地使用单个 SimpleDateFormat 实例,稍后您可以弄清楚),

setTimezone 放在第一个 sdf 上:

String dateStr = "2014-05-15 16:14:58 PM";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
//sdf.setTimeZone(TimeZone.getTimeZone("America/Denver"));
Date date = sdf.parse(dateStr);
System.out.println(date);

将相同的setTimezone添加到另一个sdf:

SimpleDateFormat sdf1 =  new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
sdf1.setTimeZone(TimeZone.getTimeZone("America/Denver"));
System.out.println(sdf1.format(date));

现在,您正在将日期字符串解析为当前(JVM)时区中的日期。然后将相同的日期格式化为不同时区的字符串。

我使用更改后的代码获得的输出(我的 JVM 时区是 IST):

Thu May 15 16:14:58 IST 2014 // Parsed the date string in IST
2014-05-15 04:44:58 AM // Equivalent time in Denver

关于java - 通过日期字符串获取其他TimeZone的时间,结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23673122/

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