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

标签 java datetime simpledateformat

添加示例代码:

    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/

相关文章:

Java:为什么它使用固定数量的内存?或者它如何管理内存?

java - 在 java 应用程序和 android 应用程序中使用相同的 java 类时的两种不同格式

sql - 时间点的最近邻

AngularJS - 如何制作从 00 :00:00 format 开始的秒表

java - SimpleDateFormat:无法解析的日期 MMMM yyyy

java - 实现通用接口(interface)的正确方法

java - Android 上的特殊字符\n 和\r

java - 如何从另一个组件的监听器为 JTable 设置表模型?

Java SimpleDateFormat 不接受##/##

java - 如何格式化日期