Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 时间和日历_Java_Datetime_Calendar - Fatal编程技术网

Java 时间和日历

Java 时间和日历,java,datetime,calendar,Java,Datetime,Calendar,如何添加/减去两个时间对象。我有两个时间对象(到达和离开),格式为“yyyy/MMM/dd HH:mm:ss”。我需要打印出发时间和到达时间之间的差异。我正在生成以下时间广告: public String getTime() { Calendar currentDate = Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss"); r

如何添加/减去两个时间对象。我有两个时间对象(到达和离开),格式为“yyyy/MMM/dd HH:mm:ss”。我需要打印出发时间和到达时间之间的差异。我正在生成以下时间广告:

public String getTime() {
    Calendar currentDate = Calendar.getInstance();
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");
    return formatter.format(currentDate.getTime());
}
我能在需要打印的时候,在工厂里获得时间并格式化它吗?

看看图书馆

您可以轻松地减去和添加日期时间,并轻松地找出时间间隔:

// interval from start to end
DateTime start = new DateTime(2004, 12, 25, 0, 0, 0, 0);
DateTime end = new DateTime(2005, 1, 1, 0, 0, 0, 0);
Interval interval = new Interval(start, end);

您可以使用getTime方法获取两个日历的时间(以毫秒为单位)。当您可以将减法结果转换为所需的度量单位时。如果你打算认真对待时间/持续时间,那么看看Joda图书馆吧


Upd。你应该给getTime打两次电话。返回的第一个对象是Date,当您在Date上调用getTime时,您将获得long值。

我将以毫秒为单位转换两个time/Date对象。然后我将减去它们(我们正在处理多头)

然后,我将根据得到的long值创建一个Date对象。之后,您可以使用Calendar.setDate(Date)构建日历


问候

将它们转换为日期,然后再转换为long并减去,这将得到以毫秒为单位的时间差

Date d1 = DateFormat.parse(time1);
Date d2 = DateFormat.parse(time2);
long diffInMilliSeconds = d1.getTime()-d2.getTime();

像这样的

public long getTimeDiff() throws Exception {
    String arrival = "2011/Nov/10 13:15:24";
    String departure = "2011/Jan/10 13:15:24";

    SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MMM/dd HH:mm:ss");

    java.util.Date date1 = formatter.parse(arrival);
    java.util.Date date2 = formatter.parse(departure);

    return date2.getTime() - date1.getTime();
}

是的,从日期开始,使用
getTime()
转换为毫秒(或
getTimeInMillis()
转换为日历)。这会给你很长的值,你可以减去。这是最简单的部分

然后您可以自己将这些毫秒转换为可读格式。但使用打包的库来实现这一点可能是有意义的


有些人喜欢Joda库来计算这些类型的日期。我觉得这太棒了。它提供了
DateUtils
,如果您想执行诸如将日期四舍五入或截短到最接近的分钟或小时等计算,则该类非常有用。最有用的部分是
DurationFormatUtils
类,该类为您提供了
formatDurationHMS
等函数,以将其格式化为nice小时:分钟:秒显示和
formatDurationWords
获取文本(花式!)或其他类似函数,以轻松地将毫秒格式设置为可读格式。

作为旁注,获取两个日期(毫秒)之间的(非毫秒)持续时间并非易事-它取决于一年中的时间和时区(当然,这主要是为了处理夏令时)。相关代码需要计算出两个日期的年/月/日等,然后处理这些数字。