【问题标题】:Display time interval in minutes using joda Date time to display in Calendar使用 joda 以分钟为单位显示时间间隔以显示在日历中
【发布时间】:2020-10-07 20:25:18
【问题描述】:

我想用15分钟或30分钟显示时间间隔列表,比如

喜欢

1:00
1:15
1:30
1:45

1:00
1:30
2:00
2:30

下面的代码使用 Joda Date 时间库,它以小时为间隔显示时间。我只是想以 15 或 30 分钟的间隔显示时间。

val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0)
        for (i in 1..23) {
                val formattedHours = Formatter.getHoursWithMinutes(context!!, hourDateTime.withHourOfDay(i))
        }

Formatter.kt

    fun getHoursWithMinutes(context: Context, dateTime: DateTime) = dateTime.toString("h:mm a")

而不是像 1:00 ,2:00 ,3:00 ,4:00 那样显示 date(s) 以 15 或 30 分钟的间隔显示 p>

Currently working View 正在使用 Simple Calendar

我尝试了下面写的另一种方法,但这个时间间隔发生了变化,但小时数保持不变

12:00 -> 12:30 -> 12:00 -> 12:30

   val hourDateTime = DateTime().withDate(2000, 1, 1).withTime(0, 0, 0, 0)
    var interval = 30
    for (i in 1..23) {
        if(i == 1 ) interval = 0
        val formattedHours = Formatter.getHoursWithMinutes(context!!, hourDateTime.withMinuteOfHour(interval) )
        interval += 30
        if(interval == 60) interval = 0
    } 

【问题讨论】:

    标签: android kotlin datetime-format android-calendar android-jodatime


    【解决方案1】:

    java.time 和 ThreeTenABP

    我不会写 Kotlin。请从我的 Java 翻译。

        Duration interval = Duration.ofMinutes(15);
    
        LocalTime time = LocalTime.of(1, 0);
        for (int i = 0; i < 10; i++) {
            System.out.println(time);
            time = time.plus(interval);
        }
    

    输出:

    01:00
    01:15
    01:30
    01:45
    02:00
    02:15
    02:30
    02:45
    03:00
    03:15
    

    将时间间隔设置为 Duration.ofMinutes(30) 以获取 01:00、01:30 等。

    我正在通过 backport 使用现代 Java 日期和时间 API java.time,见下文。 java.time 是 Joda-Time 的继承者。如果您已经在使用 Joda-Time 并且现在不想迁移到 java.time,我相信 Joda-Time 也可以实现与上述非常相似的操作。

    问题:java.time 不需要 Android API 26 级吗?

    java.time 在较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6

    • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,现代 API 是内置的。
    • 在非 Android 的 Java 6 和 7 中,获取 ThreeTen Backport,这是现代类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
    • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

    链接

    【讨论】:

      猜你喜欢
      • 2014-10-05
      • 1970-01-01
      • 2023-03-07
      • 2013-12-11
      • 2014-07-03
      • 2012-08-21
      • 2017-03-25
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多