【问题标题】:problems comparing two Calendar dates in Android在Android中比较两个日历日期的问题
【发布时间】:2010-08-18 20:00:55
【问题描述】:

我想将当前系统日期与修复日期进行比较,但得到了错误的结果。通过尝试找出问题所在,我以以下 Java 代码结束:

    // today, 18th of August 2010
    long currSystem = System.currentTimeMillis();
    Calendar calToday = Calendar.getInstance();
    Calendar calFix = Calendar.getInstance();
    long milliToday = calToday.getTimeInMillis();
    long milliOlder = calFix.getTimeInMillis();
    long deltaOlder = milliOlder - milliToday;
    long deltaSystem = currSystem - milliToday;

    // 1st of August 2010
    calFix.set( 2010, 8, 1 );
    long milliChanged1 = calFix.getTimeInMillis();
    long deltaChanged1 = milliChanged1 - milliToday;
    boolean isAfter1 = calToday.after( calFix );
    boolean isBefore1 = calToday.before( calFix );

    // 1st of October 2010
    calFix.set( 2010, 10, 1 ); 
    long milliChanged2 = calFix.getTimeInMillis();
    long deltaChanged2 = milliChanged2 - milliToday;
    boolean isAfter2 = calToday.after( calFix );
    boolean isBefore2 = calToday.before( calFix );

调试器中的结果是:

当前系统:1282160371775
deltaChanged1:1209600009
deltaChanged2:6480000009
deltaOlder:9
deltaSystem: -25
isAfter1: false
isAfter2:假
isBefore1:真 isBefore2: 真 milliChanged1:1283369971809
milliChanged2:1288640371809
毫老:1282160371809
毫今日:1282160371800

deltaOlder 和 deltaSystems 的细微差别是由于执行时间,这没问题。 但是今天(8 月 18 日)和第一个设定日期(8 月 1 日)的比较结果是错误的 IMO。 isAfter1 应该为真,isBefore1 应该为假; 与第二个设定日期(10 月 1 日)的比较是可以的。

在比较两个日期的简单事情中我做错了什么?

【问题讨论】:

    标签: java android date calendar compare


    【解决方案1】:

    在 Calendar 对象中,月份是从 0 开始的,因此八月应该是 7,十月应该是 9。

    因此,您只需更改您的“集合”以获得正确的数字,它应该可以正常工作。

    // 1st of August 2010
    calFix.set( 2010, 7, 1 );
    
    // 1st of October 2010
    calFix.set( 2010, 9, 1 ); 
    

    【讨论】:

    • 谢谢,我没想到会有这样的答案,因为我有 C# 背景而不是 Java。但是从 0 开始的月份让我感到惊讶。从 0 开始的星期几可以,但是月份呢?!
    • 为什么一周中的某一天从 0 开始或多或少有意义?
    • @infero 我同意。这是违反直觉的。它应该是全 0-base 或全 1-based。
    • @AHungerArtist 因为我们还使用数字表示月份中的日期和年份中的月份,并且在现实生活中我们都从 1 开始。但是对于星期几有两个“系统”:美国人以星期日开始,欧洲人以星期一作为一周的第一天开始。那么,为什么要让世界变得更加复杂呢?
    猜你喜欢
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多