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