我正在将一个日历对象中存储的日期转换为MySQL中的查询.我需要格式为"yyyy-MM-dd HH:mm:ss"的字符串,即:"2010-01-01 15:30:00".我正在使用如下代码:
Calendar TimeStop = Calendar.getInstance();
TimeStop.set(2010, 01, 01, 15, 30, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String TimeStop_Str = sdf.format(TimeStop.getTime());
Run Code Online (Sandbox Code Playgroud)
现在,该字符串的,而不是"2010 - 01 -01 15:30:00"像我所期望的是"2010 - 02 -01 15:30:00".我已经在http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html上检查了解析器公式中可能存在的错误(例如,月份或资本HH的资本MM)几个小时)但它没有奏效.
我想我应该设置一些其他领域,或者可能还有另一种方法......任何想法?
Calendar.JANUARY实际上0,不是1.
当您提供01在当月领域set,你实际上设置月至2月,这就是为什么你02当SimpleDateFormat它呈现为MM.
当您使用任何Calendar.get/set方法时,您必须采取额外的预防措施,以确保您了解"自然的"基于1的索引与更"笨拙" Calendar的基于0的索引之间的差异.每当你获得/设定一个月的时候Calendar,总有这种可能会导致严重的错误.
这只是其中一个非常尴尬的设计,Calendar因此有很多不足之处.其中一个更好,更愉快的日期/时间API库是Joda Time,所以如果可能的话,你可以考虑转换到那个库.
Calendar.MONTH- "对于现场数get和set.指示一个月这是一个特定于日历的值一年的第一个月[...]时,JANUARY即0".Calendar.set(…, int month, …)- " month- 用于设置MONTH日历字段的值.月值为0,例如,1表示0."另外,请注意,01它实际上是八进制文字(即基数为8).你不应该养成前缀0为整数文字(§3.10.1)的习惯,因为它们会导致细微的错误/错误,除非你非常小心.
例如,int i = 09;是非法的Java代码.
System.out.println(010); // prints 8, not 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24188 次 |
| 最近记录: |