gpt4 book ai didi

java - 这段代码的时间问题

转载 作者:行者123 更新时间:2023-12-01 16:39:04 24 4
gpt4 key购买 nike

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class test {

/*
* Calculate the difference between two date/times *
*
*/

private static long dateDiff(Date toDate, Date fromDate) {
Calendar cal = Calendar.getInstance();
cal.setTime(toDate);
long ms = cal.getTimeInMillis();
cal.setTime(fromDate);
ms -= cal.getTimeInMillis();
return ms;
}

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
Date d1 = null;
Date d2 = null;

try {
d1 = sdf.parse("11:00:00");
d2 = sdf.parse("10:00:00");
} catch (Exception e) {
e.printStackTrace();
}

long result = dateDiff(d1, d2);

Date time = new Date(result);

System.out.println(time);
}
}

当我运行它时,我得到这个结果:

欧洲中部时间 1970 年 1 月 1 日星期四 02:00:00

我预计会有 1 小时的时差?!又是时区问题?

知道如何修复它。

谢谢大家

最佳答案

我不知道您希望这样做做什么,但您实际上正在做的是使用默认时区输出 1970 年 1 月 1 日午夜后一小时对应的日期。

您似乎想要使用 Date 来表示持续时间(即秒数)。它不会这样做,日期格式化程序也不会将日期呈现为持续时间。

<小时/>

I need the time difference between two Date fields and then put it in MySql (time format)

对于您想要执行的操作,您需要将持续时间值计算为 long,然后使用 java.sql.Time(long) 构造函数创建 Time目的。您可以使用其 toString() 方法序列化该对象,也可以将其用作 JDBC 准备语句中的参数。

事实证明我上面的建议也是错误的。

您真正的问题是 SQL Time 类型用于表示时间...而不是持续时间。事实上,SQL 没有专用的持续时间类型,因此您最多可以将持续时间表示为整数秒或毫秒或其他值。

<小时/>

(对于更一般的情况,Joda Time 库通常被认为提供了用于操作日期、时间和相关时间值的最佳 API。但是对于这个简单的情况,标准 J2SE 库应该足够了......只要您正确使用它们。)

关于java - 这段代码的时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com