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

标签 java date timezone

我正在与它的时区约会,我想将它转换为另一个时区,例如我有日期“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/

相关文章:

java - 如何使用 actions 类在相邻窗口或选项卡中打开链接(右键单击 element->sendkeys ArrowDown ->sendkeys Enter)

java - 将 java.util.Date 转换为 datastax 的 LocalDate

Java 日期格式

excel - 如果日期介于两个日期之间,则查找一个值

PHP Date() 显示不正确的时区

parsing - 为什么 time.Parse 不使用时区?

java - Android:如何在android中下载文件?

java - 以编程方式添加到 TableRow 时,ImageView 不显示

java - 依赖项列表中的项目 'jasmin' 和英雄无效 对于烟灰

ruby-on-rails - 在 9 :00 AM in their Local Time Zone 向用户发送时事通讯