【问题标题】:GMT conversion wrong at 12am格林威治标准时间上午 12 点转换错误
【发布时间】:2014-12-02 12:08:31
【问题描述】:

好的,所以我在 stackoverflow 上使用了一些帖子来获得一些 XML 数据的半工作转换。

在 XML 数据馈送中,我得到一个日期和时间,作为单独的元素 - 它们是 GMT 时间。

因此,为了将其转换并与本地时间进行比较,我正在执行以下操作(“ne”包含来自 XML 提要的我的对象):

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy HH:mm");
sdf.setTimeZone(TimeZone.getTimeZone(myTimeZone.getDisplayName()));

Date newdate = sdf.parse(ne.getNewsDate().toString() + " " + ne.getNewsTime().toString());

if (newdate.before(new Date())) 
    //don't use
else 
    //use

因此,作为 XML 提要中错误转换的日期/时间的示例,我们来看:

<date>
<![CDATA[ 12-02-2014 ]]>
</date>
<time>
<![CDATA[ 12:00am ]]>
</time>

上面的“newdate”返回“Tue Dec 02 23:00:00 AEDT 2014”,而我的系统时钟显示为 2/12/2014 3:00PM” 很明显,它正在将格林威治标准时间 12-02-2014 12:00 转换为未来的时间,而我需要它来实现它是过去的时间。

所以我感到困惑的是,它正确地转换了来自提要的大部分日期/时间,但上面的某些日期/时间是不正确的。

我希望这是有道理的,所以基本上我试图忽略 XML 提要中的日期/时间,方法是将两个单独的日期/时间字段转换为我的本地时间,然后检查它是否过去或不是。

【问题讨论】:

    标签: java xml date


    【解决方案1】:

    HH is the date format for 24-hour dates, 并且您没有在日期格式字符串中传递 am/pm 标记占位符。试试这个:

    SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mma");
    

    注意 SimpleDateFormat 可能无法将小写字母 ("am") 识别为上午/下午标记的 "AM",因此您可能需要调用 String#toUpperCase()

    Date newdate = sdf.parse(ne.getNewsDate().toString() + " " + ne.getNewsTime().toString().toUpperCase());
    

    【讨论】:

    • 我爱这个网站!答案很及时! Thx - 我不需要 toUpperCase,只需要 hh:mma Perfect!
    猜你喜欢
    • 2012-03-19
    • 2019-11-25
    • 2011-05-13
    • 2010-12-02
    • 1970-01-01
    • 2013-03-10
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多