将日历对象转换为java格式的字符串;yyyy mm dd hh:mm:ss“;
我正在将存储在日历对象中的日期转换为字符串,用于MySQL中的查询。我需要格式为“yyyy-MM-dd HH:MM:ss”的字符串,即:“2010-01-01 15:30:00”。 我使用的代码如下:将日历对象转换为java格式的字符串;yyyy mm dd hh:mm:ss“;,java,datetime,Java,Datetime,我正在将存储在日历对象中的日期转换为字符串,用于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-d
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());
现在,字符串不是我所期望的“2010-01-01 15:30:00”,而是“2010-02-01 15:30:00”。
我已经检查了解析器公式中可能存在的错误(例如,月份的大写MM或小时的大写HH),但它不起作用
我想我应该设置一些其他字段,或者可能有另一种方法。。。有什么想法吗?实际上是0
,而不是1
当您在set
中为月份字段提供01
时,实际上是将月份设置为二月,这就是为什么当SimpleDateFormat
将其呈现为MM
时,您会得到02
使用任何Calendar.get/set
方法时,必须采取额外的预防措施,以确保您意识到“自然”1基索引与更“笨拙”的Calendar
0基索引之间的差异。任何时候,当您获取/设置日历的月份时,都有可能导致严重的错误
这只是其中一个非常尴尬的设计,留下了很多需要改进的地方。其中一个更好的、更令人愉快的日期/时间API库是可用的,所以如果可能的话,您可以考虑切换到那个库。
API链接
- -“表示月份的
get
和set
字段号。这是一个特定于日历的值。一年的第一个月[…]是一月,即0”
- -“
month
-用于设置month
日历字段的值。month值以0为基础。例如,1月份为0。”
关于八进制文字
另外,请注意,01
实际上是一个八进制文字(即)。您不应该养成将0
前置为整数文本()的习惯,因为除非您非常小心,否则它们可能会导致细微的错误
例如,inti=09
是非法的Java代码
System.out.println(010); // prints 8, not 10
另见
只是从
0
开始的几个月(而不是1
)
也就是说,您不应该为了在数据库中插入日期而转换为字符串。您可以使用时间戳,也可以与一起使用。Java编码惯例是使用小写首字母作为变量名,例如timeStop
。Danke!这意味着日历从“0”开始,而解析器从“1”开始。。。好的,谢谢你的另一封信comment@andystrath:对于java.util.Calendar
的月份字段,是的,它从0
开始。这就是为什么当你将月份设置为1
时,实际上是二月
,这是02
格式的MM
(关于数据库内容)+1来自我;我不知道确切的细节,但这听起来更明智。