【问题标题】:Android Calendar does not show start of day, 00:00:00Android 日历不显示一天的开始时间,00:00:00
【发布时间】:2020-07-28 03:27:51
【问题描述】:

我正在尝试为一天的开始或 00:00:00 创建一个日历对象

这是我的代码。

    val calendarStart = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.US)
    calendarStart.time = Date()
    calendarStart[Calendar.HOUR] = 0
    calendarStart[Calendar.HOUR_OF_DAY] = 0
    calendarStart[Calendar.MINUTE] = 0
    calendarStart[Calendar.SECOND] = 0
    calendarStart[Calendar.MILLISECOND] = 0
    val utcStartDate = calendarStart.time

    val calendarEnd = Calendar.getInstance(TimeZone.getTimeZone("EST"), Locale.US)
    calendarEnd[Calendar.HOUR_OF_DAY] = 23
    calendarEnd[Calendar.MINUTE] = 59
    calendarEnd[Calendar.SECOND] = 59
    calendarEnd[Calendar.MILLISECOND] = 999
    val utcEndDate = calendarEnd.time

结束日期似乎没问题,但开始日期显示为 01:00:00,如调试器日志的屏幕截图所示。

谁能向我解释为什么它显示为 1:00:00 以及如何创建一天日历的开始?

*** 更新 ***

#snachmsm 给出的答案是正确的,并且确实解决了问题。但是,我选择使用此代码:

    val dayStart: LocalDateTime = now.with(LocalTime.MIN)
    val zdtStart: ZonedDateTime = dayStart.atZone(ZoneId.systemDefault())
    val startDate = Date.from(zdtStart.toInstant())

    val dayEnd: LocalDateTime = now.with(LocalTime.MAX)
    val zdtEnd: ZonedDateTime = dayEnd.atZone(ZoneId.systemDefault())
    val endDate = Date.from(zdtEnd.toInstant())

【问题讨论】:

  • 你想用什么值来开始日历?

标签: java android kotlin


【解决方案1】:

请注意,您正在尝试获取 EST 时区,并且日志显示 EDT 时区 - 与您的情况一样,相差 1 小时

根据THIS EST 在Android 中不使用夏令时。尝试使用getTimeZone("America/New_York")

【讨论】:

  • 哈哈!是的,杜...我的坏。是的,这确实纠正了这个问题。但是,我最终这样做了: val dayStart: LocalDateTime = now.with(LocalTime.MIN) val zdtStart: ZonedDateTime = dayStart.atZone(ZoneId.systemDefault()) val startDate = Date.from(zdtStart.toInstant()) val dayEnd: LocalDateTime = now.with(LocalTime.MAX) val zdtEnd: ZonedDateTime = dayEnd.atZone(ZoneId.systemDefault()) val endDate = Date.from(zdtEnd.toInstant())
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 2017-08-11
  • 2013-07-12
  • 1970-01-01
相关资源
最近更新 更多