代码之家  ›  专栏  ›  技术社区  ›  Insanity Geek

Java Joda time isAfter date解决方案

  •  0
  • Insanity Geek  · 技术社区  · 7 年前

    我想比较两个日期。 如果当前日期时间大于或晚于 指定日期,则返回“True”。

    到目前为止,我已经试过了。

    String deadline = "25/11/2017 11:00:00";
    DateTime utc = new DateTime(DateTimeZone.UTC);
    DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka");
    DateTime dhakaTime = utc.toDateTime(timeZone);
    //Dead Line Time
    DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
    DateTime deadlineTime = format.parseDateTime(deadline.trim());
    //Comapare
    return deadlineTime.isAfter(dhakaTime.plusDays(2));
    

    因为今天是23和dhakaTime。plusDays(2)将是25,因此它应该返回 “正确”。

    但我越来越“假”。

    输出值:

    达卡蒂姆。plusDays(2)=2017-11-25T14:10:27.762+06:00
    死线时间=2017-11-25T11:00:00.000+06:00

    我是错过了什么还是做错了什么?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Sridhar    7 年前

    它给 false 正确地

    你在比较

    deadLineTime = 2017-11-25T11:00:00.000+06:00 and 
    dhakaTime(+2) =  2017-11-25T14:10:27.762+06:00
    

    deadLineTime 位于 上午11点 但是 dhakaTime(+2) 位于 下午2点 . 所以

    (Nov 25, 2017 11AM)isAfter(Nov 25, 2017 2PM) .

    编辑:测试用例

    正如您所提到的,下面使用了不同的测试用例进行比较 deadLine 具有 dhakaTime (+1天和+2天)。我希望这能让你了解它的工作原理。

    public static void main(String[] args) {
        String deadline = "25/11/2017 11:00:00";
        DateTime utc = new DateTime(DateTimeZone.UTC);
        DateTimeZone timeZone = DateTimeZone.forID("Asia/Dhaka");
        DateTime dhakaTime = utc.toDateTime(timeZone);
        //Dead Line Time
        DateTimeFormatter format = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");
        DateTime deadlineTime = format.parseDateTime(deadline.trim());
    
        System.out.println("Deadline : " + deadline);
        System.out.println("Current datetim : " + dhakaTime);
        System.out.println("current datetime + 1 day : " + dhakaTime.plusDays(1));
        System.out.println("current datetime + 2 day : " + dhakaTime.plusDays(2));
    
        System.out.println("Is deadline after current datetime:" + deadlineTime.isAfter(dhakaTime)); 
        System.out.println("Is deadline after current datetime + 1 day:" + deadlineTime.isAfter(dhakaTime.plusDays(1))); 
        System.out.println("Is deadline after current datetime + 2 day:" + deadlineTime.isAfter(dhakaTime.plusDays(2))); 
    }
    
        2
  •  0
  •   bobby    7 年前

    尝试使用DateTimeFormatter with zone(DateTimeZone zone)方法,并使用该方法创建DateTime