我期待这个打印1970-01-01-00:00:00,但它打印1970-12-31-19:00:00
我怎么误解了Date的计算方式?这是一年假.我在Windows 7上用JDK 1.6运行它
System.out.println(new SimpleDateFormat("YYYY-MM-dd-HH:mm:ss").format(new Date(0)));
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 20
它不仅仅是时区 - 它是使用时区和使用的混合,YYYY它表示周年而不是年(从Java 7开始).改变它yyyy,你会看到1969年.
从1至53日历年的第一周的WEEK_OF_YEAR领域范围计算值是最早的七天内开始对getFirstDayOfWeek(),它包含从当年至少getMinimalDaysInFirstWeek()天.因而它取决于getMinimalDaysInFirstWeek(),getFirstDayOfWeek()的值,和一月的一周中的一年1周和下一年的1周(不包括)之间1.周一天按顺序编号从2到52或53(Julian-Gregorian过渡所涉及的年份除外).
在构造GregorianCalendar时,使用依赖于语言环境的资源初始化getFirstDayOfWeek()和getMinimalDaysInFirstWeek()值.一周确定是与当getFirstDayOfWeek()是星期一和getMinimalDaysInFirstWeek()是4,这是在其中标准是优选的语言环境中使用的值的ISO 8601标准兼容.可以通过调用setFirstDayOfWeek()和setMinimalDaysInFirstWeek()来显式设置这些值.
一周的年份与WEEK_OF_YEAR周期同步.第一周和最后一周(包括)之间的所有周都具有相同的周年值.因此,一周的第一天和最后一天可能具有不同的日历年值.
所以问题在于,1969年"正常年份"的最后一天实际上是1970年的"一周".
你绝对应该使用yyyy以避免混淆 - 周年相对很少有用,并且很容易引起混淆,正如我们所见:)
编辑:如评论中所述,你确定你没有使用Java 7吗?1.6中的文档SimpleDateFormat没有提到它......也许你正在编译1.6但是在7中运行?
Chr*_*ris 10
围捕正确答案约YYYY与yyyy约时区的处理,这里是产生您预期的输出的代码:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(new Date(0))); //1970-01-01-00:00:00
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57154 次 |
| 最近记录: |