我有这段代码:它的作用是将字符串转换为时间对象。
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)?
试试这个:
好吧,我找到了 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();
java.time
2014 年 3 月,Java 8 引入了现代的
java.time
日期时间 API,取代了容易出错的旧版java.util
日期时间 API。任何新代码都应使用 java.time
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]
了解有关现代日期时间 API 的更多信息