好的,所以我在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中的日期/时间。不
答案 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());