有人知道为什么Date从String转换时会丢失时间值吗?我似乎无法想出这个。
以下是我正在使用的SimpleDateFormat
类型:
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MM/dd/yyyy HH:mm a");
我尝试转换的日期是表格中的字符串:
String dateString = "Mon 06/23/2014 03:00 PM";
当我做以下事情时:
Date convertDateFromString = null;
try{
convertDateFromString = simpleDateFormat.parse(dateString);
}catch(ParseException ex){
ex.printStackTrace();
}
System.out.println(convertDateFromString.getTime());
我的输出是:1403496000000
预期输出为:1403550000000
有人可以帮助我理解为什么没有解析时间吗?
更新 - 已解决 --->>在Jon Skeet的帮助下
现在使用这个SimpleDateFormat
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE MM/dd/yyyy hh:mm a", Locale.getDefault());
现在输出正确。
答案 0 :(得分:6)
您已经以格式指定了HH
,这是24小时格式。但是你还有一个AM / PM指示符。
因此," 03:00 PM"没有意义 - 它同时试图代表凌晨3点(24小时03)和下午3点(数据中的PM)。
听起来你可能想要格式字符串中的hh
,作为12小时的说明符。
该问题的部分。接下来是时区。您的预期价值(1403550000000)代表2014-06-23 19:00:00Z。所以大概是你期望使用目前比UTC晚4个小时的时区。
您当前的实际值(1403496000000)是2014-06-23 04:00:00Z ...所以它似乎在比UTC晚1小时的时区中被解析。
您需要确定数据所在的时区,并在SimpleDateFormat
中明确指定。