String to Date转换正在浪费时间

时间:2014-06-27 13:21:12

标签: java date

有人知道为什么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());

现在输出正确。

1 个答案:

答案 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中明确指定。