gpt4 book ai didi

java - TOD 时钟时间到 java.util.Date 或毫秒

转载 作者:行者123 更新时间:2023-12-03 23:45:51 26 4
gpt4 key购买 nike

我有一个数据库表,其中通过 ETL 填充了来自大型机的数据。该表的一列在时间中称为“TOD”。

此列存储以下值:"CAE7631DC43DC686"“CAE7631C4AC6DC0B”“CAE6216DF2BC0D04”"CAE621D8F9916E8E"

所有这些值都在 2013 年 2 月 10 日和 2013 年 2 月 11 日左右。现在,在大型机上,这是一个时间-日期表示(TOD 时钟)。

它表示从 1900 年 1 月 1 日开始过去的时间,以微秒为单位(1/1 000 000 秒)。

我需要的是一个可以将这些字符串转换为 java.util.Date 的 java 库/方法/算法实现。

在网上找到这些网站: http://paul.saers.com/Tod_howto.html http://www.longpelaexpertise.com.au/toolsTOD.php

这个页面解释了如何计算它,但对我来说有点太多了。我确定我会在某处犯一些错误。

所以,我的问题是;您知道我可以使用的图书馆(Joda Time 吗?)?我需要将这些值转换为 java.util.Date 并将 Date 对象转换为字符串表示形式(如“CAE621D8F9916E8E”)。

提前致谢。

最佳答案

在我的用例中,我有一个 getter 方法,它直接读取 8 个字节的 TOD 作为字节数组并将其转换为一个 long,但这里坚持海报:

BigInteger bi = new BigInteger    ("CAE7631DC43DC686", 16); //  no strip off of 686 
long tod = bi2.longValue();

我使用以下方法来避免 BigDecimal 计算开销:

tod = tod >>> 12;  // remove rightmost 3 bytes and replace with zeros
tod = tod - 2208988800000000l; // substract 1970
tod = tod/1000; // make millis out of micros
// timeformatter and dateformatter without Joda
SimpleDateFormat timeFormatter = new SimpleDateFormat("HH:mm:ss.SS z Z", Locale.getDefault());
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
// Display
System.out.println(timeFormatter.format(new Date(tod)));
System.out.println(dateFormatter.format(new Date(tod)));

输出将是:

22:59:46.420 CET +0100

10.02.2013

关于java - TOD 时钟时间到 java.util.Date 或毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14817202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com