微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将日历对象转换为java格式的字符串,格式为“yyyy-mm-dd hh:mm:ss”

我正在将字符串中存储在日历对象中的日期转换为 MySQL中的查询.我需要格式为“yyyy-MM-dd HH:mm:ss”的字符串,即:“2010-01-01 15:30:00”.
我正在使用如下代码
Calendar TimeStop = Calendar.getInstance();
    TimeStop.set(2010,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”.
我已经在http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html上检查了解析器公式中可能存在的错误(例如,月份的资本MM或小时的资本HH),但它没有奏效.

我想我应该设置一些其他领域,或者可能还有另一种方法……任何想法?

解决方法

Calendar.JANUARY实际上是0,而不是1.

当您为集合中的月份字段提供01时,您实际上将月份设置为2月,这就是当SimpleDateFormat将其呈现为MM时获得02的原因.

当您使用任何Calendar.get / set方法时,您必须采取额外的预防措施,以确保您了解“自然的”基于1的索引与更“笨拙”的基于0的索引之间的差异.每当你获得/设置日历的月份时,总有这种可能导致严重的错误.

这只是Calendar中那些非常笨拙的设计之一,还有很多不足之处.其中一个更好,更令人愉快的日期/时间API库是Joda Time,所以如果可能的话,您可以考虑切换到该库.

API链接

> Calendar.MONTH – “获取和设置的字段编号,表示月份.这是特定于日历的值.一年中的第一个月是1月,即0”.
> Calendar.set(…,int month,…) – “month – 用于设置MONTH日历字段的值.月值为0,例如,0表示1月.”

八进制文字

另外,请注意01实际上是八进制文字(即base 8).你不应该养成将0添加到整数文字(§3.10.1)的习惯,因为它们会导致细微的错误/错误,除非你非常小心.

例如,int i = 09;是一个非法的Java代码.

System.out.println(010); // prints 8,not 10

也可以看看

> Can I customize syntax highlighting in Eclipse to show octal literals differently?
> Octal number literals: when? why? ever?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐