当前位置: 首页 > 面试题库 >

SimpleDateFormat解析会丢失时区

姬心思
2023-03-14
问题内容

码:

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z");
    sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
    System.out.println(new Date());
    try {
        String d = sdf.format(new Date());
        System.out.println(d);
        System.out.println(sdf.parse(d));
    } catch (Exception e) {
        e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }

输出:

Thu Aug 08 17:26:32 GMT+08:00 2013
2013.08.08 09:26:32 GMT
Thu Aug 08 17:26:32 GMT+08:00 2013

请注意,将format()格式Date正确设置为GMT,但是parse()丢失了GMT详细信息。我知道我可以使用substring()并解决此问题,但是造成这种现象的原因是什么?

这是一个重复的问题,没有任何答案。

编辑:让我以另一种方式提出问题,什么是检索Date对象的方式,使其始终在GMT中?


问题答案:

我需要的是:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));

SimpleDateFormat sdfLocal = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");

try {
    String d = sdf.format(new Date());
    System.out.println(d);
    System.out.println(sdfLocal.parse(d));
} catch (Exception e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
}

输出:有点可疑,但我只希望日期保持一致

2013.08.08 11:01:08
Thu Aug 08 11:01:08 GMT+08:00 2013


 类似资料:
  • 问题内容: 我有这个日期,似乎无法正确解析。 字符串文本“ 2014年5月21日星期三05:44:09 -0700”; 这是我的日期格式 我正在尝试使用SimpleDateFormat对其进行解析。 错误字符串无法分析。 我在这里做错了。 请注意,这不是重复项。另一个问题中没有描述使用强制语言环境的解决方案。 问题答案: 要解析您的日期,您可以使用 但是如果失败了,您会看到 java.text.P

  • 问题内容: 我正在使用 其中的字符串是格式。 例如,如果是40/02/2013,我将获得一个错误,而parse方法将返回Date 2013年3月12日(12/03/2013)。我在抱怨什么? 问题答案: 设置宽大处理位: 指定日期/时间解析是否宽松。使用宽大的解析,解析器可以使用试探法来解释与该对象的格式不完全匹配的输入。在严格分析的情况下,输入必须与该对象的格式匹配。 如下代码: 给出: 笔记

  • 我有一个方法可以使用SimpleDateFormat将字符串(yyyy-MM-dd hh:mm:ss.sss)解析为日期对象。

  • 我有一些对象类对象的json字符串表示 我有json {“classItem”:“smpb.utility.classes.SMPBBaseObjectsList”,“dataItemsClass”:“smpb.base.classes.SMPBUser”,“dataSliceCode”:“012013”,“data”:[{“id”:137404611751070000,“Name”:“Test3

  • 问题内容: 嗨,我有一个使用自定义格式字符串设置的简单日期格式:MMddyy 我给它解析以下值:4 1 01 我认为它不应该因为空格而解析,但是“简单日期格式”会返回日期 0001AD年4月4日 有什么想法吗? 问题答案: 这是预期的行为-您告诉DateFormat对象期望日期的6个字符的String表示形式,这就是您传递的内容。对空格进行了解析。但是,如果您使用“ 4x1x01”,则会出现错误。

  • 我尝试将字符串转换为日期。