解析日期在 java 后增加一天

After Parsing Date is incremented by one Day in java

我遇到了一些奇怪的问题。在将字符串解析为日期后,我在格式为 "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

去掉这一行的"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

问题是您在没有指定时区的情况下解析日期字符串。当您解析日期时,它会选择 IST(印度标准时间)作为时区。

所以不仅仅是第二天,而是 12 小时后,在您的示例中恰好是凌晨 5 点左右。

我认为如果您指定 'z' 格式字符并在原始字符串中包含时区,就不会遇到这个问题。

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

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