早上12点GMT转换错误

时间:2014-12-02 04:05:15

标签: java xml date

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

在XML数据Feed中,我得到一个日期和时间,作为SEPARATE元素 - 它们是GMT时间。

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

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 Feed的日期/时间示例,让我们来看看:

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

“newdate”返回“Tue Dec 02 23:00:00 AEDT 2014”,当我的系统时钟显示为2/12/2014 3:00 PM“ 很明显,它将GMT时间转换为12-02-2014 12:00 am,将其作为未来的时间错误,而我需要它才能意识到它已经过去了。

所以我感到困惑的是它正确地从Feed中转换了MOST的日期/时间,但是上面的某些不正确。

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

1 个答案:

答案 0 :(得分:1)

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

SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy hh:mma");
对于am / pm标记,

NB SimpleDateFormat可能无法将小写字母("am")识别为"AM",因此可能需要致电String#toUpperCase()

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