Java中如何将格式化字符串解析为日期对象

Java中如何将格式化字符串解析为日期对象,java,date-format,Java,Date Format,在Java中,如何将“Wed,Jun 2013 00:48:12 GMT”解析为日期对象,然后以相同格式打印日期对象 我试过这个: String dStr= "Wed, 05 Jun 2013 00:48:12 GMT"; SimpleDateFormat ft = new SimpleDateFormat ("E, dd MMM yyyy hh:mm:ss ZZZ"); Date t = ft.parse(dStr); System.out.println(t); System.ou

在Java中,如何将“Wed,Jun 2013 00:48:12 GMT”解析为日期对象,然后以相同格式打印日期对象

我试过这个:

String dStr= "Wed, 05 Jun 2013 00:48:12 GMT"; 
SimpleDateFormat ft =  new SimpleDateFormat ("E, dd MMM yyyy hh:mm:ss ZZZ"); 
Date t = ft.parse(dStr); 
System.out.println(t); 
System.out.println(ft.format(t));
结果是

Wed Jun 05 10:48:12 EST 2013
Wed, 05 Jun 2013 10:48:12 +1000 

提前感谢:

看起来您想要的是
zzz
而不是
zzz
。这将有助于你将时区作为代码而不是数字来读/写。

你没有错误,两个都是:
Wed,2013年6月5日00:48:12 GMT
Wed,2013年6月5日00:48:12 GMT
代表同一时间,第一个是GMT(格伦威奇),第二个是澳大利亚的同一时间(EST),您只需要正确配置时区

如果要以GMT打印相同的日期,请将此行添加到代码中:

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

现在,如果您还希望将日期打印为“GMT”而不是“+0000”,请遵循@HewWolff answer(使用zzz而不是zzz)

这就解决了您的问题:

import java.text.*;
import java.util.*;

public class DateIt{
    public static void main(String [] args) throws Exception{
        String dStr= "Wed, 05 Jun 2013 00:48:12 GMT"; 
        SimpleDateFormat ft =  new SimpleDateFormat ("E, dd MMM yyyy HH:mm:ss z"); 
        Date t = ft.parse(dStr); 
        TimeZone gmt = TimeZone.getTimeZone("England/London");
        ft.setTimeZone(gmt);
        System.out.println(t); 
        System.out.println(ft.format(t));
        }
}

呃,我以前遇到过这个问题

SimpleDateFormat.parse(String)
方法(我怀疑)使用了
Calendar
的一个实例。这有两个原因:

  • 你不知道你在处理哪种风格的日历 (格里高利人?玛雅人?素食主义者?)
  • 日历将其字段初始化为 不一定要设置的默认值。当 SimpleDataFormat对其创建的日历实例调用getTime() 要返回日期,该日期将具有默认字段值 不是由您提交的开始字符串指示的

  • 当调用
    ft.format(t)
    时,这些默认值会产生影响。我发现解决这个问题的唯一方法是直接使用Calendar类(顺便说一句,这完全不是小事),我会在以后有更多时间时尝试提供一个代码示例。同时,看看
    javafx.util.converter.DateStringConverter

    这真的会产生10个小时的差异吗,还是那段文字复制不好?@MartijnCourteaux不,它看起来只是在本地时区输出。啊,现在我明白了:)我把+100而不是+1000搞混了。这仍然需要一个小时…这里:
    System.out.println(“周三,2013年6月5日00:48:12 GMT”)问题是:OP是希望输出使用原始输入字符串中的时区,还是使用固定时区(如GMT)?我想这可能是解决方案的一部分,但首先我们需要知道确切的问题。@Mattias Buelens,我打算在固定时区(如GMT)中输出原始输入字符串,我应该在这里使用什么日期和时间模式。预期结果应与“2013年6月5日星期三00:48:12 GMT”相同。谢谢。@user1304846使用Hew Wolff answer(打印GMT)和我的(将时区设置为GMT)@morgano,谢谢你的建议,我使用了下面提供的代码时钟,并在他的代码中将“z”替换为“zzz”,结果是“Wed,Jun 2013 12:48:12 GMT”,这与输入字符串“Wed,Jun 2013 00:48:12 GMT”不同“。这里还有什么建议吗?@user1304846在24小时格式中使用
    HH
    而不是
    HH
    。Clocks还指出,他将跟进自己的答案。谢谢,我使用您的代码,但结果是“Wed,05 Jun 2013 12:48:12 GMT”,这与输入字符串“Wed,05 Jun 2013 00:48:12 GMT”不同。这里有进一步的建议吗?第7行是否有“HH”而不是“HH”“HH”将以24小时表示法返回时间。你是对的,我使用了“HH”,在我将其更改为“HH”后,一切正常。非常感谢。