Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.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 如何以分钟为单位找出两个Joda Time DateTimes之间的差异_Java_Jodatime - Fatal编程技术网

Java 如何以分钟为单位找出两个Joda Time DateTimes之间的差异

Java 如何以分钟为单位找出两个Joda Time DateTimes之间的差异,java,jodatime,Java,Jodatime,下面是我写的方法: public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date, int transitionVal, String type, User user) { DateTime datetime = new DateTime(date); datetime = datetime .plus(Period.minut

下面是我写的方法:

public List<Map<String, Object>> loadNotYetInEmployee(int shift, Date date,
        int transitionVal, String type, User user) {

    DateTime datetime = new DateTime(date);
    datetime = datetime
            .plus(Period.minutes(shiftTiming.getSession1InTime()));

    List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

    sql = SqlMapUtils.getSql("attendance.attendancestatus.latein",
            parameters);
    result = getJdbcTemplate().queryForList(sql);
    for (int i = 0; i < result.size(); i++) {
        Date punchInTime = (Date) result.get(i).get("punchtime");
        DateTime punchTime = new DateTime(punchInTime);
    }
    return result;
}
public List loadNotYetInEmployee(内部班次、日期、,
int transitionVal,字符串类型,用户){
DateTime DateTime=新的日期时间(日期);
datetime=datetime
.plus(Period.minutes(shiftting.getSession1InTime());
列表结果=新建ArrayList();
sql=SqlMapUtils.getSql(“attention.attentinancestatus.latein”,
参数);
结果=getJdbcTemplate().queryForList(sql);
对于(int i=0;i
现在从我的方法中,你可以看到我在object中有一个名为
datetime
的对象,从我的结果中,我得到一个时间戳,我正在将它转换为jodatime
punchTime
。现在我想找出这两个日期之间的差异,我该怎么做?

类似于

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());
Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
哪个输出

1
24
1440


这可能更符合您的要求,这将以毫秒为单位显示两个DateTime对象之间的差异:

DateTime d1 = new DateTime();
DateTime d2 = new DateTime();

long diffInMillis = d2.getMillis() - d1.getMillis();
类似于

DateTime today = new DateTime();
DateTime yesterday = today.minusDays(1);

Duration duration = new Duration(yesterday, today);
System.out.println(duration.getStandardDays());
System.out.println(duration.getStandardHours());
System.out.println(duration.getStandardMinutes());
Minutes.minutesBetween(getStart(), getEnd()).getMinutes();
在实践中,我认为这将始终给出与基于
持续时间的答案相同的结果。但是,对于不同于分钟的时间单位,它可能更正确。例如,从2016年2月2日到2017年2月1日有365天,但实际上不到1年,如果使用
PeriodType.years()
,则应截断为0年


从理论上讲,由于闰秒的原因,这种情况可能会持续几分钟,但Joda不支持闰秒。

是您的朋友。但这只在DateTime对象位于同一时区时才起作用。是你朋友的邻居吗?程序员的回答应该是公认的。请注意
分钟数的简单用法。分钟数介于
之间。不,我不同意,它太冗长和不清楚了:“打卡时间-日期-时间之间的分钟数”比“第二个日期-毫秒数减去第一个日期-毫秒数”更糟糕。这将不考虑夏令时。以上是否考虑时区?或者我应该先转换为UTC/GMT吗?@DooDah这是一个好问题,我“相信”确实如此(因为JodaTime有
LocalTime
)的概念),但我建议您测试并查看。问题是,结果值将在哪个时区表示?我将测试并解决这个问题。对我来说,生成的时区很可能就是代码运行的服务器。我正在实现一个计划队列,需要根据另一个时区的日期计算从现在到未来某个时间的时间量。我会报告我的发现。我同意,这应该是选择的答案。创建一个新的Duration对象只是为了得到一个时差,这并不酷。想象一下,必须对大量的日期/时间对象执行时差。如果开始日期和结束日期相差太远(大于int的大小),则会失败