gpt4 book ai didi

java - 两次相加,一次是字符串,一次是HH :mm in java的日期

转载 作者:行者123 更新时间:2023-11-29 05:14:16 25 4
gpt4 key购买 nike

添加示例代码:

    String time1="0:01:30";
String time2="0:01:35";//For temp Only
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
Date date1 = timeFormat.parse(time1);
Date date2 = new Date();//timeFormat.parse(time2);
String s = timeFormat.format(date2);
Date date4 = timeFormat.parse(s);
long sum = date1.getTime() + date4.getTime();
String date3 = timeFormat.format(new Date(sum));
System.out.println("The sum is "+date3);// output not getting correctly

减法示例代码:

    calculationBetween2Dates(Date bigTime, Date smallTime){
SimpleDateFormat st1 = new SimpleDateFormat("HH:mm");
long diff = bigTime.getTime() - smallTime.getTime();
long diffMinutes = diff / (60 * 1000);
long diffHours = diff / (60 * 60 * 1000);
long onlyMinits = diffMinutes - (diffHours * 60);
String var = String.valueOf(diffHours + ":" + onlyMinits);
Date warkedDate = st1.parse(var);
return warkedDate;
}// it worked For me for sub between 2 timings

添加是不可能的;我添加的代码有什么问题?

最佳答案

Java Date 对象是特定时间点的包装器。这被实现为“经过纪元的毫秒数 [1970 年 1 月 1 日]”。而且,根据 Javadocs,getTime()方法返回此毫秒数。

因此,当您将时间解析为 Date 时,您不会得到表示“1:30am”的对象。您将获得一个代表“今天 1:30am”的对象。因此它的 getTime() 将返回一些代表大约 45 年的毫秒数。

如果将这些输出中的两个相加,您将得到一个以毫秒为单位的大约 90 年的数字,因此如果您将其转换回 Date,您将立即得到代表 2059 年末的某个时间点。那是......真的不是你想要的。

(请注意,它在某种程度上适用于减法情况,因为您得到两个非常大的数字,但相隔仅半小时。当您减去它们时,您得到的日期表示午夜后一点1970 年 1 月 1 日。仍然 - 这可能在某些极端情况下不起作用,具体取决于夏令时等因素,因为您仍在引用历史上的实际瞬间 - 所以我不会依赖它。 )


更好的方法是使用一个仅表示一天中某个时间的对象。 Java 8 有 LocalTime来表示这一点,您可以通过组合 toSecondOfDay 调用的结果轻松添加其中两个。

编辑:如果您在使用早期版本的 Java 时遇到困难...任何日期/时间相关问题的标准响应过去都是“使用 Joda-Time”(这正是 Java 8 类的基础) ).如果出于某种原因第三方库不是一个选项,那么您可能必须实现自己的类来表示和添加时间(这不是涉及的 - 只是三个 int 字段,和一些当后两个达到 60 时,“携带一个”的逻辑)。

关于java - 两次相加,一次是字符串,一次是HH :mm in java的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146146/

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