日期date1
的格式为YY-MM-dd hh:mm:ss.SSS
我想比较
date1.getTime()
通过执行
检索new Date().getTime()
有
SimpleDateFormat sf = new SimpleDateFormat("YY-MM-dd hh:mm:ss.SSS");
Date date1 = sf.parse(date1AsString);
...
compare date1.getTime() with new Date().getTime();
如何将这两个日期带到一个共同的时区'比较它们? 如何获得date1在相同的时间长度'作为新的日期()?我想拥有相同的时区...... 感谢
答案 0 :(得分:1)
来自Date
类
Date
表示特定的时刻,精确到毫秒。
时间实例与我们对时区增强的时间定义无关。 现在对您和我来说都是一样的,无论我们(可能)在不同的时区。
添加时区概念的是DateFormat
日期表示为
Date
对象或自1970年1月1日00:00:00 GMT以来的毫秒数。
当你调用Date#getTime()
时,你会回来
自此
Date
对象所代表的1970年1月1日00:00:00 GMT以来的毫秒数。
这可以用来比较Date
个对象,因为它们具有相同的根。同样,compareTo
将返回
如果参数
Date
等于此Date
,则值为0;一个值 如果Date
在Date
参数之前,则小于0;和一个价值 如果Date
在Date参数之后,则大于0。
答案 1 :(得分:1)
如果他们的时区信息未知,则无法比较两个日期。
例如,如果您的date1AsString
变量只是2014-12-16 16:00:00
,那么您无法判断它是否大于或小于2014-12-16 20:00:00+0000
。
看起来第一个日期比第二个日期少4个小时;但如果有人补充说第一个日期是太平洋时间(UTC-0800),那么它实际上比第二个日期(2014-12-16 16:00:00-0800
= 2014-12-17 00:00:00+0000
)多4个小时。
因此,如果date1AsString
的时区未知,则无法将其转换为UTC或其他任何内容进行比较。
答案 2 :(得分:0)
getTime()
返回自1970年1月1日00:00:00以来的毫秒数。您需要比较两个long
,大致如下:
long time = new Date().getTime();
long time2 = date1.getTime();
if(time>time2)
System.out.println(String.format("time is greater than time2 by %d", time-time2)
else
System.out.println(String.format("time2 is greater than time by %d", time2-time)
答案 3 :(得分:0)
如果你知道时区 date1.setTime(date1.getTime()+/-(3600000 *小时))转换,如果date1时间是格林威治标准时间转到GMT + 2小时必须是2并且唱歌必须是+
答案 4 :(得分:0)
通常任何服务器环境都将使用GMT,因此您在比较日期时不必担心时区,只有在格式化要显示给用户的值时才会这样。
您可以比较两个日期:
SimpleDateFormat sf = new SimpleDateFormat("YY-MM-dd hh:mm:ss.SSS");
Date date1 = sf.parse(date1AsString);
boolean isBefore = date1.before(new Date());
boolean isAfter = date1.after(new Date());
或者,您可以比较unix时间的数值以获得相同的结果:
...
boolean isBefore = date1.getTime() < new Date().getTime();
boolean isAfter = date1.getTime() > new Date().getTime();
答案 5 :(得分:-1)
Date
类包含before(date)
和after(date)
等方法。您应该查看Date
类。
答案 6 :(得分:-1)
所以我认为你要找的是设置SimpleDateFormat的时区:
sf.setTimeZone(TimeZone.getTimeZone("EST"));