我下面有这个代码,但我没有得到正确的日期 例如输入的日期是 01/01/2013 12:35 但 format.parse 仅返回 dd/mm/yyyy 并排除 hh:mm
这是一个样本日期时间 03/09/2012 15:26,输出为 1346649960000
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy hh:mm");
long data = format.parse(childNode.getTextContent()).getTime();
关于为什么这会奇怪地格式化时间有任何线索吗?
我认为它给出了有效的输出。 getTime() 返回自 1970 年 1 月 1 日 00:00:00 以来的毫秒数。所以最后 3 个零代表毫秒
我在您的代码中看到两个问题:
请参阅下面我提出的修复方案:
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
您的输入字符串
03/09/2012 15:26
缺少时区或相对于UTC的偏移量指示符。因此,在现代 Java 中,解析为 LocalDateTime
。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MM/dd/uuuu HH:mm" ) ;
LocalDateTime ldt = LocalDateTime.parse( input , f ) ;
显然您想要从 UTC 1970 年第一个时刻(1970-01-01T00:00Z)的纪元参考开始计算毫秒数。
您无法从该输入中得出该计数。您的输入缺少时区或偏移量的上下文。因此,我们无法知道您的输入是否意味着日本东京的 3 点半左右、法国图卢兹的 3 点半左右或美国俄亥俄州托莱多的 3 点半左右 — 三个截然不同的时刻,相隔几个小时。
如果您知道预期的时区,请应用
ZoneId
来获取 ZonedDateTime
。
或者您可能希望该日期和时间代表 UTC 中的某个时刻,与 UTC 的偏移量为零时-分-秒。如果是这样,则应用零偏移量来生成
OffsetDateTime
对象。然后提取一个 Instant
,并从中得到一个计数。
long count = ldt.atOffset( ZoneOffset.UTC ).toInstant().getEpochSecond() ;