解析日期在java中增加一天

时间:2015-02-20 11:53:03

标签: java date

我面临一些奇怪的问题。在将字符串解析为日期之后,我在字符串中以日期格式“dd-MMM-yyyy hh:mm:ss a”,它增加了一天。

 public static void main(String[] args) throws ParseException {
    String s = "09-Mar-2015 17:05:04 PM";
    System.out.println("before parsing " + s);
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a");
    Date d = sdf.parse(s);
    System.out.println("date " + d);
    String format = sdf.format(d);
    System.out.println("after  format  " + format);

}

O / P

before parsing 09-Mar-2015 17:05:04 PM 
date Tue Mar 10 05:05:04 IST 2015
 after  format  10-Mar-2015 05:05:04 AM

2 个答案:

答案 0 :(得分:1)

删除此行中的“a”。

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss a");

public static void main(String[] args) throws ParseException {
    String s = "09-Mar-2015 17:05:04 PM";
    System.out.println("before parsing " + s);
    SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
    Date d = sdf.parse(s);
    System.out.println("date " + d);
    String format = sdf.format(d);
    System.out.println("after  format  " + format);

}

输出

before parsing 09-Mar-2015 17:05:04 PM
date Mon Mar 09 17:05:04 GMT 2015
after  format  09-Mar-2015 05:05:04

答案 1 :(得分:-1)

问题是您正在解析日期字符串而未指定时区。解析日期时,它会选择IST(印度标准时间)作为时区。

所以它不仅仅是第二天,而是12小时之后,恰好在你的例子中大约凌晨5点。

我想如果你指定' z'格式化字符并在原始字符串中包含时区,您将不会遇到此问题。

SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss z");

要准确确定问题,我们需要有关您的机器所在时区的信息。