gpt4 book ai didi

java - 使用时区java将字符串转换为适当的日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:15:32 24 4
gpt4 key购买 nike

我正在与它的时区约会,我想将它转换为另一个时区,例如我有日期“3/15/2013 3:01:53 PM”,它位于时区“GMT-06:00”。我想将其转换为“GMT-05:00”时区。我有很多搜索,但我对 Date 的实际工作方式感到困惑。如何将时区应用到日期。我尝试过使用 SimpleDateFormat、Calender 以及偏移量。

DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa XXX");
df.setTimeZone(TimeZone.getTimeZone("GMT"));
Date dt = null;
try {
dt = df.parse("3/15/2013 3:01:53 PM -06:00");
} catch (ParseException e) {
e.printStackTrace();
}
String newDateString = df.format(dt);
System.out.println(newDateString);

它返回输出03/15/2013 09:01:53 AM Z。我想应该是03/15/2013 09:01:53 PM Z,因为时间在 'GMT-06:00' 时区,所以应该是 HH+6 才能获得 GMT 时间。我想要“yyyy-MM-dd HH:mm:ss”格式的日期,其中 HH 是 24 小时制。请帮我举个例子。提前致谢。

编辑:

我正在使用 SimpleDateFormat 将字符串转换为日期

DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss aaa");
Date dt = null;
try {
dt = df.parse("3/15/2013 3:01:53 PM");
} catch (ParseException e) {
e.printStackTrace();
}

现在,如您所说,我向日历指定我的日期在“GMT-06:00”时区并设置我的日期,

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT-6"));
cal.setTime(dt);

现在,我告诉日历我想要“GMT”日期

cal.setTimeZone (TimeZone.getTimeZone("GMT"));

System.out.println(cal.getTime());

输出:

Fri Mar 15 03:01:53 CDT 2013

如果我做错了,请告诉我。

最佳答案

您需要两个格式对象,一个用于解析,另一个用于打印,因为您使用两个不同的时区,请参见此处:

// h instead of H  because of AM/PM-format
DateFormat parseFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX");
Date dt = null;
try {
dt = parseFormat.parse("3/15/2013 3:01:53 PM -06:00");
}catch (ParseException e) {
e.printStackTrace();
}

DateFormat printFormat = new SimpleDateFormat("M/dd/yyyy hh:mm:ss aaa XXX");
printFormat.setTimeZone(TimeZone.getTimeZone("GMT-05"));
String newDateString = printFormat.format(dt);
System.out.println(newDateString);

输出:3/15/2013 04:01:53 PM -05:00

如果你想要 HH:mm:ss(24 小时格式),那么你只需替换

hh:mm:ss aaa 

通过

HH:mm:ss

在打印格式模式中。


评论问题的其他方面:

java.util.Date 没有内部时区,并且始终按照规范引用 UTC。您不能在此对象内更改它。格式化字符串可以进行时区转换,但是如我的代码示例所示(您想转换为 GMT-05 区)。

然后问题切换到使用 UTC 时区(符号 Z)以 ISO 格式打印 Date 对象的新要求。这可以通过将模式替换为“yyyy-MM-dd'T'HH:mm:ssXXX”并将 printFormat 的时区明确设置为 GMT+00 来在格式化中完成。您应该阐明您真正想要的格式化输出。

关于 java.util.GregorianCalendar:在此处设置时区是以编程方式更改日历对象,因此它会影响方法调用,如 calendar.get(Calendar.HOUR_OF_DAY)。然而,这与格式化无关!

关于java - 使用时区java将字符串转换为适当的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23672326/

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