加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:39:10 所属栏目:Java 来源:网络整理
导读:我正在将字符串中存储在日历对象中的日期转换为 MySQL中的查询.我需要格式为“yyyy-MM-dd HH:mm:ss”的字符串,即:“2010-01-01 15:30:00”. 我正在使用如下代码: Calendar TimeStop = Calendar.getInstance(); TimeStop.set(2010,01,15,30,0); SimpleDat
我正在将字符串中存储在日历对象中的日期转换为 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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读