有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将不存在的日期插入内存数据库

我正在尝试将日期2015-03-08 02:00:00插入我的Java内存数据库

DateTime2015-03-08 02:00:00在现实生活中并不存在,因为daylights节省时间发生在这个确切的时刻[至少在美国],这意味着2:00 AM变成3:00 AM。有没有办法忽略这个事实,直接将2015-03-08 02:00:00存储到我的数据库中

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

在Java的Date类中

    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

现在在乔达时代

    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)

共 (1) 个答案

  1. # 1 楼答案

    在存储日期时,将其存储为长毫秒是一个优势。 你可以在日期前拿到。getTimestamp(); 那么你就不必处理时区问题了

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