格林尼治标准时间上午12点转换错误
问题描述:
好吧,我已经使用了一些在*上的帖子来获得一些转换半工作的一些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馈送的日期/时间,然后检查是否过去或不。
答
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());
的人,我很喜欢这个网站!答案是现货,及时! Thx - 我不需要toUpperCase,只需要hh:mma完美! – makapaka 2014-12-02 04:38:18