2014-12-02 48 views
0

好吧,我已经使用了一些在stackoverflow上的帖子来获得一些转换半工作的一些XML数据。格林尼治标准时间上午12点转换错误

在XML数据馈送中,我得到日期和时间,作为SEPARATE元素 - 它们在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”上面正在恢复“星期二12月2 23:00:00东部时间2014”的时候,我的系统时钟读2014年2月12日3:00 PM “ 很明显,它将格林尼治标准时间12-02-2014 12:00转换成错误的时间作为未来的时间重新,而我需要它意识到这是过去。

所以,我很困惑的是,它正确地转换为来自Feed的日期/时间的大部分,但上面的某些不正确。

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

回答

1

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

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

N.B.SimpleDateFormat可能无法识别小写("am")作为"AM"的AM/PM标记,所以你可能需要打电话String#toUpperCase()

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

的人,我很喜欢这个网站!答案是现货,及时! Thx - 我不需要toUpperCase,只需要hh:mma完美! – makapaka 2014-12-02 04:38:18

相关问题