gpt4 book ai didi

java - 解析远程服务器上的日期时间

转载 作者:行者123 更新时间:2023-12-02 05:03:29 26 4
gpt4 key购买 nike

我在一台远程服务器上遇到问题。我有代码:

source.setDate("20150120");
source.setTime("080000");

Date date = DateTimeFormat.DATE.get().withZone(DateTimeZone.getDefault()).parseDateTime(source.getDate()).toDate();

DateTime dateTime = new DateTime(date, DateTimeZone.getDefault());
final DateTime newDateTime = DateTimeFormat.TIME.get().withZone(DateTimeZone.getDefault()).parseDateTime(source.getTime());
dateTime = newDateTime.withDate(dateTime.getYear(), dateTime.getMonthOfYear(), dateTime.getDayOfMonth());

结果是

date = Mon Jan 19 23:00:00 GMT+03:00 2015
dateTime = Tue Jan 20 7:00:00 GMT+03:00 2015

问题是它返回(时间一小时)然后是一台远程服务器上的源时间。在我的本地服务器上不会发生此类错误。那么为什么当我使用 DateTimeZone.getDefault() 时会发生这种情况,它应该返回 localServer timeZone那么为什么结果日期 = 当前日期 - 一小时?

UPD1。DateTimeFormat 实际上是一个带有值的枚举

public enum DateTimeFormat {
TIME("HHmmss"),
DATE("yyyyMMdd");

private final DateTimeFormatter value;

public DateTimeFormatter get() {
return value;
}

我的目标是解析任何服务器上的日期和时间,任何时区都具有相同的时间和日期。

因此,如果我解析时间 8:00,它应该在所有时区中显示 8:00

对于当前示例,DateTimeZone.getDefault() 是欧洲/莫斯科一件奇怪的事情是,在另一台具有相同时间/区域的服务器上,相同的代码给出了另一个结果。

这段代码理论上正确吗?因为我觉得服务器属性配置有一些错误

最佳答案

假设源是标准的 java.util.Date,为什么您只是简单地对日期进行字符串处理?即使您使用大量代码来处理时区,它们也将使用服务器的时区进行格式化。我认为你真的应该研究一下 Java 中日期时间的行为方式。其一,您使用的方法 (getDate()) 已被弃用很长一段时间(没有双关语)

请注意,日期对象只是一个 long 值的包装器,该值是某个时间点的 unix 纪元值。我真的不明白你到底想做什么,但我的感觉是它可以简单得多。据我所知,所有字符串操作似乎基本上都是不必要的。当然不需要尝试对 Date 对象的时区进行任何更改,因为 Date 中根本没有存储时区信息。时区仅在格式化日期以使人类或其他不理解纪元值的系统可读时才起作用。

要深入阅读,我可以推荐 http://www.odi.ch/prog/design/datetime.php这解释了很多关于如何使用日期和时间的内容。在这种情况下,最重要的一点是 Date 对象本身永远不会位于某个时区。

关于java - 解析远程服务器上的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28026686/

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