解析日期在 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");
为了准确地确定问题,我们需要有关您的机器所在时区的信息。
我遇到了一些奇怪的问题。在将字符串解析为日期后,我在格式为 "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");
为了准确地确定问题,我们需要有关您的机器所在时区的信息。