Tag: 时间戳

为什么我的System.nanoTime()坏了?

我自己和我这个时代的另一位开发人员最近从工作中的Core 2 Duo机器搬到了新的Core 2 Quad 9505; 两者都使用JDK 1.6.0_18运行Windows XP SP3 32位。 在这样做的时候,我们对一些时序/统计/度量聚合代码的自动unit testing很快就会失败,因为看起来似乎是从System.nanoTime()返回的荒谬值。 在我的机器上可靠地显示此行为的测试代码是: import static org.junit.Assert.assertThat; import org.hamcrest.Matchers; import org.junit.Test; public class NanoTest { @Test public void testNanoTime() throws InterruptedException { final long sleepMillis = 5000; long nanosBefore = System.nanoTime(); long millisBefore = System.currentTimeMillis(); Thread.sleep(sleepMillis); long nanosTaken = System.nanoTime() – nanosBefore; long millisTaken = […]

将Date对象与Java中的TimeStamp进行比较

当我测试这段代码时: java.util.Date date = new java.util.Date(); java.util.Date stamp = new java.sql.Timestamp(date.getTime()); assertTrue(date.equals(stamp)); assertTrue(date.compareTo(stamp) == 0); assertTrue(stamp.compareTo(date) == 0); assertTrue(stamp.equals(date)); 我期待一个真实,真实,真实,虚假。 因为这: 在java.sql.Timestamp的javadoc中,它指出: 注意:此类型是java.util.Date和单独的纳秒值的组合。 只有整数秒存储在java.util.Date组件中。 分数秒 – 纳米 – 是分开的。 传递类型为java.util.Date的值时,Timestamp.equals(Object)方法永远不会返回true,因为日期的nanos组件未知。 因此,Timestamp.equals(Object)方法与java.util.Date.equals(Object)方法不对称。 此外,哈希码方法使用底层的java.util.Date实现,因此在其计算中不包括nanos。 由于Timestamp类和上面提到的java.util.Date类之间存在差异,因此建议代码不要将Timestamp值一般视为java.util.Date的实例。 Timestamp和java.util.Date之间的inheritance关系实际上表示实现inheritance,而不是类型inheritance。 但相反,我会得到一个真实的,虚假的,真实的,虚假的。 有任何想法吗? 编辑:当我用equals方法检查两个日期时出现此问题,但其中一个Date对象来自Hibernate类并且调试我看到该对象包含TimeStamp。 所以equals方法评估为false,然后我发现了这个: http : //mattfleming.com/node/141 但是当我尝试代码时,我会得到不同的结果……如果我不能同时使用equals和compareTo,我应该用什么来检查2个日期是否相同?!?!

如何计算两个Java java.sql.Timestamps之间的差异?

请包括nanos,否则它将是微不足道的: long diff = Math.abs(t1.getTime () – t2.getTime ()); [编辑]我想要最准确的结果,所以没有双打; 只有整数/长整数。 此外,结果必须是积极的。 伪代码: Timestamp result = abs (t1 – t2); 例子: t1 = (time=1001, nanos=1000000), t2 = (time=999, nanos=999000000) -> diff = (time=2, nanos=2000000) 是的,java.sql.Timestamp中的毫秒在时间和纳米标准中是重复的,因此1001毫秒意味着1秒(1000)和1毫安在time部分和nanos部分,因为1毫秒= 1000000纳秒)。 这比它看起来更加狡猾。 我建议不要在没有实际测试代码或准备好工作代码示例的情况下发布答案:)

Java将UTC时间戳转换为本地DateTime

我知道有很多关于将UTC时间/日期转换为当地时间的回复post,但没有帮助我弄清楚我的问题是什么。 我的问题是:通过UTC时间戳,我如何获得本地DateTime? 这就是我现在所拥有的,但这只是将时间戳转换为DateTime格式。 SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”); sdf.setTimeZone(TimeZone.getDefault()); sdf.format(new Date(timestamp * 1000)); 编辑:我在云上保存UTC时间戳,以便每个设备(Android / iOS)都可以查询并转换为它的时区。

如何将java.sql.Timestamp增加14天?

我有一个应用程序,它将一个时间戳作为sql选择的开始日期和结束日期的边界,我希望从今年的第一个星期一开始,将今年的周数填充一个hashmap作为值和周数作为键。 我发现很难使用时间戳,我觉得增加86,400,000秒来增加一天的感觉并不是很好,因为这并没有考虑到闰日,小时,秒。 我计划在其中添加13天23小时59分59秒,以便我可以按周查找地图中的开始日期作为关键字,然后使用开始日期来获取结束日期。 所以我想尝试得到这样的东西: Week startDate endDate 1 2011-01-03 00:00:00 2011-01-16 23:59:59 2 2011-01-17 00:00:00 2011-01-30 23:59:59 使用Map中的前两列,并在查找后计算最后一列。 如何安全地增加java.sql.Timestamp?

如何在java中生成随机时间戳?

我想生成一个随机时间戳并为其添加一个随机增量以生成第二个时间戳。 那可能吗? 如果我传递随机长值来创建时间戳,并且我想随机生成该长值,那么生成此值以在2012年给出时间戳的约束是什么?

java.util.Date格式SSSSSS:如果不是微秒,那么最后3位数是多少?

刚刚在我的Windows(8)工作站和AIX上测试了这段代码: public static void main(String[] args) { System.out.println(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSSSSS”).format(new Date())); System.out.println(new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss.SSSSSS”).format(new Date())); } 并得到类似的结果: 2013-10-07 12:53:26.000905 2013-10-07 12:53:26.000906 有人可以解释一下,如果不是微秒,最后的数字是什么? 注意:我与DB2数据库进行交互,其中使用定时列作为TIMESTAMP存储按时间顺序排列的数据,其中6位数字在秒之后,即微秒(IMO)。 但是所有这些“时间戳”都是通过请求以下查询来创建的: SELECT current timestamp as currenttimestamp FROM Table ( values (1)) temp 我想知道,鉴于上述结果,我不能只在我的代码中使用new Date()而不是从数据库中选择current timestamp 。 谢谢。 PS:我搜索过但发现没有相关(已回答)的问题,例如: java中的当前时间(以微秒为单位)或以小时,分钟,秒,毫秒,微秒获取时间