`

SimpleDateFormat使用的时候的注意点

    博客分类:
  • java
阅读更多

    今天在帮助同事查找一个项目bug的时候发现一个很奇怪的问题,一个字符串经过给定的一个format进行转换后变成了另外一个日期,原来是format串用错了,将'yyyy-MM-dd'错误的写成了'yyyy-mm-dd',format的结果也就自然而然错误,测试代码如下:

SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
long time = format.parse("2012-09-05").getTime();
System.out.println(time);
System.out.println(new Date(time));
format = new SimpleDateFormat("yyyy-mm-dd HH:MM:ss");
time = format.parse("2012-01-05 00:05:00").getTime();
System.out.println(time);
System.out.println(new Date(time));


    输出结果如下:

1325693340000
Thu Jan 05 00:09:00 CST 2012
1336147260000
Sat May 05 00:01:00 CST 2012


       简单的解释一下原因,我们知道,yyyy代表年,MM代表月,dd代表天,HH代表小时,mm代表分钟,ss代表秒,SimpleDateFormat应该是根据传入的值和初始化时候的format串进行匹配,所有第一个2012-09-05,转换的结果就成了yyyy(2012) MM(没有给,默认值为01),dd(05), HH(00),mm(09),ss(00),所以自然而然的就成了 2012-01-05.
       关于第二个,输入的时间是2012-01-05 00:05:00,映射的结果为: yyyy(2012), mm(01),dd(05),HH(00),MM(01),ss(05),所有应该就变成了 2012-05-05 00:01:00了。
       这个由于并不报错,这种错误有时候的潜伏期也比较长。
分享到:
评论

相关推荐

    java时间格式转换

    - 当使用`SimpleDateFormat`解析日期时,需要注意输入字符串的格式必须与定义的格式完全一致,否则会抛出`ParseException`异常。 - 在处理国际化应用时,可以考虑使用`DateTimeFormatter`等其他API,它们提供了更好...

    基于java时区转换夏令时的问题及解决方法

    夏令时是指在夏天的时候,将时钟拨快一个小时,以提早日光的使用。目前有110多个国家采用夏令时。 首先,需要了解标准时区的表示方法。标准时区可以用GMT、UTC、Etc/GMT等方式表示。例如,东八区可以用GMT+8、Etc/...

    Android 获取2个日期相差天数

    在实际的Android项目中,你可能会遇到日期的输入来自用户或者网络,这时候需要根据实际情况调整日期格式和处理方式。在上述示例中,我们使用了标准的日期格式,如果日期格式不统一,可能会导致解析异常。 此外,...

    java技巧

    Java中使用`SimpleDateFormat`类来格式化日期。首先需要创建一个`SimpleDateFormat`对象,并传入日期模板,然后通过该对象的`parse()`方法将字符串转换为`Date`对象,或通过`format()`方法将`Date`对象转换为字符串...

    SQL | 创建时间,更新时间,使用默认值自动设置|data-412945.pdf

    例如,如果我们需要根据时间段查询数据,可以使用`SimpleDateFormat`来解析日期字符串并转化为`Timestamp`对象: ```java SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); Timestamp ...

    在JSP页面获取当前时间

    在JSP中,可以使用`java.text.SimpleDateFormat`类来进行日期格式化。例如,将日期格式化为“年-月-日 时:分:秒”的形式: ```jsp java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-...

    J2EE时间处理 并且可以直接存入数据库

    根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 一、J2EE中的时间处理与数据库存储 在Java EE(原称为 J2EE)应用开发中,正确地处理时间和日期是非常重要的,尤其是在需要与数据库交互的情况下。...

    Java中常用的代码汇总

    - **使用`SimpleDateFormat`:** ```java SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); Date date = format.parse(myString); ``` 这里的关键是定义一个正确的日期格式,然后使用`parse()`...

    20个开发人员有用的Java功能代码

    - 另一种常用的方式是使用`SimpleDateFormat`类自定义日期格式,然后同样通过`parse()`方法进行转换。 ### 5. 使用JDBC连接Oracle数据库 最后,这段代码展示了如何使用Java的JDBC API连接到Oracle数据库并执行SQL...

    安卓闹钟相关-本应用类似手机系统的时钟闹钟小工具框架简单代码简单需要仔细理解逻辑不复杂.rar

    这可能涉及到`Calendar`类和`SimpleDateFormat`类的使用。 6. **权限管理**:安卓系统从6.0版本开始引入了运行时权限,开发时需要检查并请求相应的权限,如`ACCESS_FINE_LOCATION`(用于精确计时)或`WAKE_LOCK`...

    Java中日期格式化YYYY-DD的操作bug

    在Java中,日期格式化使用SimpleDateFormat类,可以使用不同的格式化符号来表示日期和时间。其中,YYYY表示week-based year,yyyy表示year。很多开发者容易混淆这两者,导致日期格式化错误。 例如,在下面的代码中...

    20个非常有用的Java程序片段.docx

    SimpleDateFormat format = new SimpleDateFormat("dd.MM.yyyy"); Date date = format.parse(myString); ``` ### 5. 使用JDBC连接Oracle数据库 通过Java的JDBC技术可以方便地操作各种数据库。下面是一个示例...

    android and java util

    - **日期时间**:处理日期和时间的转换、格式化和比较,如使用SimpleDateFormat和Calendar等。 2. **Java工具类**: - **集合操作**:Java的Collections框架提供了丰富的工具方法,如排序、查找、转换等,工具类...

    android 数字及模拟小时钟设计 AnalogClock与DigitalClock的原理

    这通常使用java.text.SimpleDateFormat类来实现。 2. **自动更新**:DigitalClock同样依赖ACTION_TIME_TICK广播来获取系统时间的最新值,并更新UI。不过,由于文本更新比图形更新更快,所以用户几乎不会察觉到延迟。...

    java 编写的记事本 源代码

    5. **添加系统时间**:可以使用`java.util.Date`和`SimpleDateFormat`类获取并格式化当前时间,然后将其插入到文本中。 6. **打开文件**:通过`JFileChooser`对话框让用户选择要打开的.txt文件,然后使用`...

    Java面试题以及答案

    可以使用`String`类的方法来实现,同时需要注意字符集的问题。 #### 17. 指出下面程序的运行结果。 这类题目需要根据具体的代码逻辑分析输出结果,主要考查对Java语法的理解。 #### 18. 抽象类和接口的区别? - ...

    基于ScheduledExecutorService的两种方法(详解)

    注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是处于轮询任务的状态。 ScheduledExecutorService提供了两种方法来实现定时任务的执行,分别...

    java面试题

    答:当数据量大,并且表关系复杂的时候不建议使用。 sleep()和wait()有什么区别? 答:sleep()是线程类的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但监控状态依然保持,到时候会自动恢复。 wait...

    简单了解spring bean作用域属性singleton和prototype的区别

    单例设计模式表示一个ClassLoader中只有一个class存在,而这里的singleton则表示一个容器对应一个Bean,也就是说当一个Bean被标识为singleton时候,spring的IOC容器中只会存在一个该Bean。 prototype作用域 与...

Global site tag (gtag.js) - Google Analytics