Java日期相关类中的预期宽容行为(JodaTime和/或Java.Date)

时间:2013-09-07 00:17:32

标签: java datetime jodatime

我有以下情况:
要计划在特定日期开始并在第二天结束的活动,将提供超过24小时约束的结束日期/时间值。
例如:start-date = 2013-01-01 23:22:00 and end-date = 2013-01-01 26:22:00

我认为解决方案是使用JodaTime提供的宽松方法。但它表现得不像我预期的那样。所以我提供了一些测试代码,解释了我的困惑:

public static void main(String[] args){

    String lenientDate = "2013-01-01 26:22:00";
    String format = "YYYY-MM-DD hh:mm:ss";
    try{

            System.out.println("Lenient Date:" + lenientDate);
            DateFormat sdf = new SimpleDateFormat(format);
            sdf.setLenient(true);
            System.out.println("Java.Date output:" + sdf.parse(lenientDate));

            DateTime dt = new DateTime(sdf.parse(lenientDate));
            System.out.println("hybrid calls:" + dt.toString());

            DateTimeFormatter parseFormat = DateTimeFormat.forPattern(format);
            Chronology lenient = LenientChronology.getInstance(GregorianChronology.getInstance());
            parseFormat = parseFormat.withChronology(lenient);

            DateTime dateTime = parseFormat.parseDateTime(lenientDate);

            System.out.println("All Joda calls:" + dateTime.toString());

            System.out.println("My expected values: " + dateTime.minusHours(12).toString());

    }catch(Exception e){
        System.out.println("Something went wrong!");
    }

} 

结果是:

Lenient Date:2013-01-01 26:22:00
Java.Date output:Mon Dec 31 02:22:00 CET 2012
hybrid calls:2012-12-31T02:22:00.000+01:00
All Joda calls:2013-01-02T14:22:00.000+01:00
My expected values: 2013-01-02T02:22:00.000+01:00

图书馆:Joda 2.2; Java:JDK 1.7;平台:Mac OSX

有人可以在日期/时间转换中解释宽恕的正确行为吗?

1 个答案:

答案 0 :(得分:0)

"hh:mm:ss"处的日期格式无效。日期格式应为:

String format = "yyyy-MM-dd HH:mm:ss";    

DateTimeFormat documentation

  半小时(1~12)的时钟    H - 小时(0~23)

使用此日期模式,所有示例都按预期工作