在内存DB中插入不存在的日期



我试图插入日期2015-03-08 02:00:00到我的Java内存数据库。

DateTime 2015-03-08 02:00:00在现实生活中不存在,因为夏令时正好发生在那个时刻[至少在美国],这意味着2:00 AM变成了3:00 AM。有没有办法忽略这个事实,并存储2015-03-08 02:00:00直接到我的数据库?

目前我正在使用Java的Date类,但我不反对使用Joda Time,如果它会找到一个解决方案。

    Date d = new Date();        
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
    String date = "2015-03-08 02:00:00.0";
    try 
    {
        d = sdf.parse(date);
        sdf.format(d);
        System.out.println(d);
    } 
    catch (ParseException e) 
    {
        e.printStackTrace();
    }

导致

Sat Mar 07 20:00:00 CST 2015

现在在Joda时间…

    String date = "2015-03-08 02:00:00.0";
    DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.S");
    DateTime dt = dtf.parseDateTime(date);
    System.out.println(dt);

搜索结果

Exception in thread "main" org.joda.time.IllegalInstantException: Cannot parse "2015-03-08 02:00:00.0": Illegal instant due to time zone offset transition (America/Chicago)
at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:471)
at org.joda.time.format.DateTimeParserBucket.computeMillis(DateTimeParserBucket.java:411)
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:882)
at Driver.main(Driver.java:44)

在存储日期时,将它们存储为长毫秒Utc是一个优势。通过date。gettimestamp ();这样你就不用处理时区了。

只有在向用户显示时间时,您应该在显示时间之前立即将其转换为当地时间

最新更新