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
的对象,从我的结果中,我得到一个时间戳,我正在将它转换为jodatimepunchTime
。现在我想找出这两个日期之间的差异,我该怎么做?类似于
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的大小),则会失败