【问题标题】:date difference in days, in Android在 Android 中以天为单位的日期差异
【发布时间】:2011-03-23 13:01:11
【问题描述】:

我必须在 android 中找到两个日期之间的天差, 我使用 timemilliseconds() 发现天数的差异 但是有没有其他方法可以找到差异?

提前感谢

【问题讨论】:

  • 使用 Joda Time's Day.daysBetween().
  • Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。使用ChronoUnit.DAYS.between枚举方法。
  • 类似问题,但使用完整日期而不是时刻:Android/Java - Date Difference in days

标签: android


【解决方案1】:

tl;博士

ChronoUnit.DAYS.between(                             // Total count of days.
    LocalDate.of( 2018 , Month.JANUARY , 23 ) ,      // Represent a certain date.
    LocalDate.now( ZoneId.of( "America/Montreal" ) ) // Determine today’s current date for a particular region (time zone).
) 

java.time

旧的 Date 类现在已被 java.time 类所取代。并且将日期时间跟踪为自纪元以来的毫秒数是令人沮丧且容易出错的。

将您的Date 对象转换为Instant。如果使用更高版本的 Android,请寻找添加到旧类的新方法。对于早期的 Android,请使用 ThreeTen-BackportThreeTenABP 项目的实用程序类进行转换。

Instant 类表示UTC 中时间轴上的时刻,分辨率为nanoseconds(最多九 (9) 位小数)。

因为Instant 始终采用UTC,您需要调整到时区。时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因区域而异。例如,Paris France 中午夜过后几分钟是新的一天,而 Montréal Québec 中仍然是“昨天”。

continent/region 的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用 3-4 个字母的伪时区,例如 ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" ) ;

申请您的Instant 以获得ZonedDateTime

ZonedDateTime zdt = instant.atZone( z ) ;

如果您只关心由日期定义的整天,请提取 LocalDate 对象。

LocalDate localDate = zdt.toLocalDate() ;

获取其他日期,例如今天。

LocalDate today = LocalDate.now( z ) ;

使用ChronoUnit枚举计算经过的总天数。

long days = ChronoUnit.DAYS.between( localDate , today ) ;

如果您想要计算年、月和日,请使用 Period 类。

Period p = Period.between( localDate , today ) ;

关于java.time

java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

从哪里获得 java.time 类?

【讨论】:

    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2011-04-19
      • 2019-02-15
      • 1970-01-01
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多