【发布时间】:2012-06-28 14:51:33
【问题描述】:
我正在尝试将Date 转换为String,然后再转换回Date。但是我发现最后的日期和原来的日期不一样,是什么原因?
//1975-06-20
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 1975);
cal.set(Calendar.MONTH, 5);
cal.set(Calendar.DAY_OF_MONTH, 20);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
System.out.println(cal);
Date originalDate = cal.getTime();
System.out.println("Date 1: " + originalDate.toString());
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date date = sdf.parse(originalDate.toString());
System.out.println("Date 2: " + date.toString());
上面代码的输出是:
cal: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1975,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=5,DAY_OF_MONTH=20,DAY_OF_YEAR=179,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=0,HOUR_OF_DAY=16,MINUTE=0,SECOND=0,MILLISECOND=333,ZONE_OFFSET=28800000,DST_OFFSET=0]
Date 1: Fri Jun 20 12:00:00 SGT 1975
Date 2: Fri Jun 20 11:30:00 SGT 1975
【问题讨论】:
-
Calendar 是区域设置感知的,而 Date 不是。见this post for more info
-
没有 DateFormat.format(String, String) 方法。您的代码无法编译。格式化日期的 toString() 表示有什么意义?为什么要解析 originalDate 的 toString() 而不是解析格式化的日期?
-
@Brad, it isn't?
-
您对
DateFormat.format()的调用与Java API 不匹配:docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html -
@JB Nizet 和@Hugo,你是对的。第一种方法是我的团队创建的实用程序类。它也使用
SimpleDateFormat。我已将其从问题中删除以避免混淆。但我的问题仍然有效..
标签: java date-format simpledateformat