楼主: ppbear0404

一个日期转换的问题

[复制链接]
论坛徽章:
43
ITPUB元老
日期:2007-01-14 09:32:112011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08开发板块每日发贴之星
日期:2011-08-29 01:01:012012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
11#
发表于 2008-1-3 23:08 | 只看该作者
原帖由 iooyoo 于 2008-1-3 19:59 发表
jdk_1.5.0_12

public class TestMain {
    static void test1() {
        SimpleDateFormat vsdf = null;
        Date vdate = null;
        vsdf = new SimpleDateFormat("yyyyMMddhhmmss";
        vsdf.setLenient(false);
        try {
            vdate = vsdf.parse("19910414000000";
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(vdate);
    }

    static void test2() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss";
        try {
            Date date = sdf.parse("19910414000000";
            System.out.println(date);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
    }

    static void test3() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss";
        try {
            Date date = sdf.parse("19910414000000";
            System.out.println(date);
        }
        catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        test1();
        try {
            Thread.sleep(2000);
        }
        catch (InterruptedException e) {
        }
        test2();
        try {
            Thread.sleep(2000);
        }
        catch (InterruptedException e) {
        }
        test3();
    }
}


null
java.text.ParseException: Unparseable date: "19910414000000"
        at java.text.DateFormat.parse(Unknown Source)
        at com.iooyoo.comics.TestMain.test1(TestMain.java:14)
        at com.iooyoo.comics.TestMain.main(TestMain.java:45)

Sun Apr 14 01:00:00 CST 1991
Sun Apr 14 01:00:00 CST 1991


一个是jdk1.5.0_13,一个是jdk1.5.0_12,真的怀疑是这几个版本的bug了

使用道具 举报

回复
论坛徽章:
53
2010新春纪念徽章
日期:2010-03-01 11:19:062012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
12#
发表于 2008-1-4 09:20 | 只看该作者
回去试了一下,好像不是,这个时间点有点问题,不知道楼主怎么试出来这个的

使用道具 举报

回复
论坛徽章:
53
2010新春纪念徽章
日期:2010-03-01 11:19:062012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
13#
发表于 2008-1-4 09:29 | 只看该作者
似乎 1991-4-14 00:00:00 和 1991-4-14 01:00:00没有区别


  1. import java.text.ParseException;
  2. import java.text.SimpleDateFormat;
  3. import java.util.Calendar;
  4. import java.util.Date;
  5. import java.util.GregorianCalendar;

  6. public class TestMain {
  7.     private static SimpleDateFormat format = new SimpleDateFormat(
  8.             "yyyy-MM-dd HH:mm:ss");

  9.     public static void main(String[] args) {
  10.         test4(1991, 3, 14, 2, 0, 0, -1);
  11.         test4(1991, 3, 14, 2, 0, 0, -2);
  12.         test4(1991, 3, 14, 2, 0, 0, -3);
  13.         test4(1991, 3, 14, 0, 0, 0, -1);
  14.         System.out.println();
  15.         test4(1992, 3, 15, 2, 0, 0, -1);
  16.         test4(1992, 3, 15, 2, 0, 0, -2);
  17.         test4(1992, 3, 15, 2, 0, 0, -3);
  18.         test4(1992, 3, 15, 0, 0, 0, -1);
  19.         System.out.println();
  20.         test4(1991, 4, 14, 2, 0, 0, -1);
  21.         test4(1991, 4, 14, 2, 0, 0, -2);
  22.         test4(1991, 4, 14, 2, 0, 0, -3);
  23.         test4(1991, 4, 14, 0, 0, 0, -1);
  24.         System.out.println();
  25.         test4(1992, 3, 15, 2, 0, 0, -1);
  26.         test4(1992, 3, 15, 2, 0, 0, -2);
  27.         test4(1992, 3, 15, 2, 0, 0, -3);
  28.         test4(1992, 3, 15, 0, 0, 0, -1);
  29.     }

  30.     static void test4(int year, int month, int day, int hour, int minute,
  31.             int second, int hourAmount) {
  32.         GregorianCalendar gc = new GregorianCalendar();
  33.         gc.set(year, month, day, hour, minute, second);

  34.         GregorianCalendar gc1 = new GregorianCalendar();
  35.         gc1.setTimeInMillis(gc.getTimeInMillis());
  36.         gc1.add(Calendar.HOUR, hourAmount);

  37.         long t1 = gc.getTimeInMillis() - gc1.getTimeInMillis();
  38.         System.out.println(format.format(gc.getTime()) + " to "
  39.                 + format.format(gc1.getTime()) + " is " + t1 / 1000L / 60
  40.                 + " minutes.");
  41.     }
  42. }
  43. --------------------------
  44. 1991-04-14 02:00:00 to 1991-04-14 01:00:00 is 60 minutes.
  45. 1991-04-14 02:00:00 to 1991-04-13 23:00:00 is 120 minutes.
  46. 1991-04-14 02:00:00 to 1991-04-13 22:00:00 is 180 minutes.
  47. 1991-04-14 01:00:00 to 1991-04-13 23:00:00 is 60 minutes.

  48. 1992-04-15 02:00:00 to 1992-04-15 01:00:00 is 60 minutes.
  49. 1992-04-15 02:00:00 to 1992-04-15 00:00:00 is 120 minutes.
  50. 1992-04-15 02:00:00 to 1992-04-14 23:00:00 is 180 minutes.
  51. 1992-04-15 00:00:00 to 1992-04-14 23:00:00 is 60 minutes.

  52. 1991-05-14 02:00:00 to 1991-05-14 01:00:00 is 60 minutes.
  53. 1991-05-14 02:00:00 to 1991-05-14 00:00:00 is 120 minutes.
  54. 1991-05-14 02:00:00 to 1991-05-13 23:00:00 is 180 minutes.
  55. 1991-05-14 00:00:00 to 1991-05-13 23:00:00 is 60 minutes.

  56. 1992-04-15 02:00:00 to 1992-04-15 01:00:00 is 60 minutes.
  57. 1992-04-15 02:00:00 to 1992-04-15 00:00:00 is 120 minutes.
  58. 1992-04-15 02:00:00 to 1992-04-14 23:00:00 is 180 minutes.
  59. 1992-04-15 00:00:00 to 1992-04-14 23:00:00 is 60 minutes.

复制代码

使用道具 举报

回复
论坛徽章:
109
开发板块每日发贴之星
日期:2006-06-06 01:02:23数据库板块每日发贴之星
日期:2006-12-30 01:03:28每日论坛发贴之星
日期:2008-07-12 01:01:37行业板块每日发贴之星
日期:2008-07-23 01:02:20ITPUB元老
日期:2010-11-12 15:19:292014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02
14#
发表于 2008-1-4 15:31 | 只看该作者
努力学习

使用道具 举报

回复
论坛徽章:
1
2008新春纪念徽章
日期:2008-02-13 12:43:03
15#
发表于 2008-1-4 16:01 | 只看该作者
学习了~

使用道具 举报

回复
论坛徽章:
0
16#
 楼主| 发表于 2008-1-4 18:51 | 只看该作者
原帖由 iooyoo 于 2008-1-4 09:20 发表
回去试了一下,好像不是,这个时间点有点问题,不知道楼主怎么试出来这个的


这个问题是偶然遇到的,一开始是将一个系统从weblogic移植到jboss上,在weblogic上时jdk是1.4,jboss用的是1.5,测试时发现了一个日期转换时有问题。后来写了一个程序,将0001-01-01到9999-12-31之间的所有日期都转换一下,结果发现有几个日期在转换时会报错。这几个日期的时分秒不能为00:00:00,其他的都可以。

今天又看了看1.4.2_12和1.5.0_12的源代码,发现类SimpleDateFormat中的parse()方法有些变化,不知道是不是这个原因导致了找个问题的发生。

使用道具 举报

回复
论坛徽章:
53
2010新春纪念徽章
日期:2010-03-01 11:19:062012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25版主1段
日期:2012-05-15 15:24:112013年新春福章
日期:2013-02-25 14:51:24马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14
17#
发表于 2008-1-4 20:11 | 只看该作者
1.4多了一个calendar.set(Calendar.HOUR, 0)
这个应该不是原因

1.4.2_15 和 1.5.0_12 这个时间点都有问题

使用道具 举报

回复
论坛徽章:
387
马上加薪
日期:2014-07-30 15:56:19itpub13周年纪念徽章
日期:2014-09-30 11:08:572015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
18#
发表于 2008-1-4 23:40 | 只看该作者
到sun里面找了一下,
http://bugs.sun.com/bugdatabase/ ... rd=SimpleDateFormat
SimpleDateFormat的bug report list

使用道具 举报

回复
论坛徽章:
387
马上加薪
日期:2014-07-30 15:56:19itpub13周年纪念徽章
日期:2014-09-30 11:08:572015年新春福章
日期:2015-03-04 14:19:112015年新春福章
日期:2015-03-06 11:57:31
19#
发表于 2008-1-4 23:42 | 只看该作者
还真不少

使用道具 举报

回复
论坛徽章:
43
ITPUB元老
日期:2007-01-14 09:32:112011新春纪念徽章
日期:2011-01-25 15:42:332011新春纪念徽章
日期:2011-01-25 15:42:56管理团队成员
日期:2011-05-07 01:45:08开发板块每日发贴之星
日期:2011-08-29 01:01:012012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:182012新春纪念徽章
日期:2012-02-13 15:11:18
20#
发表于 2008-1-5 03:18 | 只看该作者
原帖由 seraphin 于 2008-1-4 23:40 发表
到sun里面找了一下,
http://bugs.sun.com/bugdatabase/search.do?process=1&category=&bugStatus=&subcategory=&type=&keyword=SimpleDateFormat
SimpleDateFormat的bug report list



使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表