如何在Java中将负数毫秒转换为正确的时区

4

我正在处理Java日期,在这个问题上遇到了困难。在我的文件中,时间值保存为 (HH:MM:SS)。

00:00:08 以下是代码和输出结果:

  String timeinsec = "00:00:08";
  DateFormat df = new SimpleDateFormat("hh:mm:ss");
  Date time =  df.parse(timeinsec);

当我给value和time变量赋值时,问题出现了。time.fastTime变量显示为"-17992000"

当我将该值转换回HH:MM:SS格式时,它显示为"-4:-59:-51"

有人可以帮忙解决时区问题吗? 我的当前时区是GMT+5


你能展示一下转换回模式吗? - newuser
你正在尝试将一天中的时间解析为完整的日期,这是行不通的。 - Marko Topolnik
4个回答

3
尝试一下这个;
int day = (int) TimeUnit.SECONDS.toDays(seconds);
long hours = TimeUnit.SECONDS.toHours(seconds) - (day * 24);
long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60);
long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) * 60);

2

我尝试了各种方法,最终写下了这段代码,满足了我的需求。

Calendar cal = Calendar.getInstance();
String timeinsec = "00:00:08";
DateFormat df = new SimpleDateFormat("hh:mm:ss");
Date time =  df.parse(timeinsec);
cal.setTime(time); 
hms = String.format("%d:%02d:%02d", cal.get(Calendar.HOUR), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND));

输出结果为:00:00:08。

2

以下是转换回代码:

Date new_time = Time_array.get(0).time;  //-17992000 stored in "fastTime" variable
long diff = ((long)new_time.getTime());  //TimeUnit.MILLISECONDS

long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
String hms = String.format("%d:%02d:%02d", diffHours, diffMinutes, diffSeconds);

在调试中:hms的值为-4:-59:-51


0

hh 是 1~12。你应该使用 HH (0~23)

String timeinsec = "00:00:08";
DateFormat df = new SimpleDateFormat("HH:mm:ss");
Date time =  df.parse(timeinsec);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接