simpledateformat解析不能正确解析日期

时间:2013-11-20 05:15:56

标签: java date simpledateformat

我正在尝试将日期打印为:2013/11/20 08 30但是通过simpledateformat解析日期之后打印如下:Wed Nov 20 14:00:00 IST 2013, 在这里我通过了HH和MM作为08 30,但解析后它改为14:00:00

你能否建议

public class PrintDate {

public static void main(String[] args) {
    System.out.println(getDate("2013/11/20","08","30"));


}

public static Date getDate(String date, String hour, String miniute) {

    final SimpleDateFormat displayDateTimeFormat = new SimpleDateFormat("yyyy/MM/dd HH mm");

    displayDateTimeFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

    String paddedHour = hour.length() == 2 ? hour : "0" + hour;    
    int min = Integer.valueOf(miniute);
    int remainder = min % 5;
    int roundMinute = remainder > 2 ? min - remainder + 5 : min - remainder;
    String minuteStr = String.valueOf(roundMinute);
    String paddedMinuteStr = minuteStr.length() == 2 ? minuteStr : "0" + minuteStr;

    String startDateStr = date + " " + paddedHour.toUpperCase() + " " + paddedMinuteStr;

    Date startDate = null;
    try {           
        startDate = displayDateTimeFormat.parse(startDateStr);
    } catch (ParseException e) {

    }
    return startDate;

}

}

2 个答案:

答案 0 :(得分:2)

  

在解析日期之后通过simpledateformat Wed Nov 20 14:00:00 IST 2013,在这里我通过了HH和MM作为08 30但是在解析后它改为14:00:00

是的,因为您指定希望将其解析为UTC值。但是,Date本身没有时区概念 - 它只是一个瞬间。 Date.toString()始终使用默认时区。

2013-11-20 08:30 UTC与2013-11-20 14:00 IST的时间相同,所以它实际上正确解析它 - 这只是Date.toString()的结果让你感到困惑

如果您还要保留时区,则必须单独执行此操作 - 或者(更好)使用Joda Time这是一个更好的日期/时间API,并且{{3} } class,表示特定日历系统和时区中的即时时间。

答案 1 :(得分:1)

只需尝试下面的代码行,即可在所需的format -

中获取日期
Date date=new Date(2013-1900,10,20,8,30);              
SimpleDateFormat dateFormat = new SimpleDateFormat("yyy/MM/dd K mm");
String strFormatDate = dateFormat.format(date);               
Date dtFormatDate = dateFormat.parse(strFormatDate);
System.out.println("Formatted date in String:"+strFormatDate);
System.out.println("Formatted Date:"+dtFormatDate);

只需在日期格式中提供 K 而不是HH。您可以将日期设置为14 30,然后此格式也会根据需要转换日期。

由于