具有更大小时数的 Java 时间对象(用于倒计时)

问题描述 投票:0回答:3

我有这段代码:它的作用是将字符串转换为时间对象。

  String time = "288:30:18";
  DateFormat sdf = new SimpleDateFormat("hh:mm:ss");
  Date date = sdf.parse(time);

主要目标是用户可以以 HH:MM:SS 格式输入时间。问题是 HH 可以是任何数字(>12,甚至>24)。如何保持 HH 不变? 在上面的代码片段中,我得到的时间为12:30:18。如何防止 HH 部分被解析(我希望它保持 288)?

java android parsing type-conversion java-time
3个回答
1
投票

试试这个:

  1. 自己解析小时(使用从索引 0 到第一个“:”的子字符串。
  2. 运行上面的代码(你的代码)
  3. 将对象“日期”中的小时设置为您解析的数字。

0
投票

好吧,我找到了 Android 中倒计时的最佳方法。这是代码:

  CountDownTimer c=new CountDownTimer(30000,1000) {

    @Override
    public void onTick(long millisUntilFinished) {
        // TODO Auto-generated method stub


    }

    @Override
    public void onFinish() {
        // TODO Auto-generated method stub


    }
}.start();

0
投票

java.time

2014 年 3 月,Java 8 引入了现代的

java.time
日期时间 API,取代了容易出错的旧版
java.util
日期时间 API
。任何新代码都应使用
java.time
API。

使用现代日期时间 API 的解决方案

您的字符串,

288:30:18
是一个持续时间,而不是本地时间,例如
17:20:30
(或
5:20:30 pm
)。

使用字符串的各个部分创建

java.time.Duration
的对象

Duration.ofHours(Integer.parseInt(durationParts[0]))
                .plusMinutes(Integer.parseInt(durationParts[1]))
                .plusSeconds(Integer.parseInt(durationParts[2]))

您可以从

java.time
日期时间对象中添加/减去此持续时间。

演示:

class Main {
    public static void main(String[] args) {
        String[] durationParts = "288:30:18".split(":");

        Duration duration = Duration.ofHours(Integer.parseInt(durationParts[0]))
                .plusMinutes(Integer.parseInt(durationParts[1]))
                .plusSeconds(Integer.parseInt(durationParts[2]));
        System.out.println(duration);

        // You can add/subtrat duration from a date-time e.g.
        ZonedDateTime zdt = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));
        System.out.println(zdt.plus(duration));
        System.out.println(zdt.minus(duration));
    }
}

示例输出:

PT288H30M18S
2025-01-23T18:24:18.485549+05:30[Asia/Kolkata]
2024-12-30T17:23:42.485549+05:30[Asia/Kolkata]

在 Ideone.com 上尝试一下

Trail:日期时间

了解有关现代日期时间 API 的更多信息
© www.soinside.com 2019 - 2024. All rights reserved.