gpt4 book ai didi

java - JODATIME withZone 显示不正确的偏移量

转载 作者:行者123 更新时间:2023-12-01 17:28:23 24 4
gpt4 key购买 nike

我在 Coldfusion 中使用 Java 对象,因此我的代码有点不对劲。

我有一个看起来有点像这样的函数:

function getJODAOffset(sTimezone){
local.oDateTimeZone = createObject('java','org.joda.time.DateTimeZone');
local.oInstant = createObject('Java','org.joda.time.Instant');

local.oFormatter = createObject("Java",'org.joda.time.format.DateTimeFormat');
local.oFormatter = local.oFormatter.forPattern('ZZ');

local.tTime = local.oDateTimeZone.forID(arguments.sTimezone).getStandardOffset(local.oInstant); //sTimezone = 'Europe/London';

return local.oFormatter.withZone(local.oDateTimeZone.forID(arguments.sTimezone)).print(local.tTime);

}

当我期望“+00:00”时,这给了我“+01:00”的输出,但我不知道为什么。

最佳答案

好的,我想我现在已经明白了。

首先,我不确定您的代码是如何工作的 - 据我所知,没有 getStandardOffset(Instant) 方法 - 只有 getStandardOffset (长)。我们可以通过调用 getMillis() 来解决这个问题,但我不知道 Coldfusion 在做什么。

无论如何,我可以在这里重现问题:

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
public static void main(String[] args) {
DateTimeZone zone = DateTimeZone.forID("Europe/London");
Instant now = new Instant();
long offset = zone.getStandardOffset(now.getMillis());
System.out.println("Offset = " + offset);
DateTimeFormatter format = DateTimeFormat.forPattern("ZZ")
.withZone(zone);
System.out.println(format.print(offset));
}
}

输出:

Offset = 0
+01:00

问题是您将一个偏移量传递给DateTimeFormatter.print,它期望一个“自纪元以来的毫秒”值 - 一个即时.所以它将其视为等同于:

format.print(new Instant(0))

现在 new Instant(0) 代表 UTC 时间 1970 年 1 月 1 日午夜 - 但 the Europe/London time zone was genuinely at +01:00 at that point ...这就是您看到的偏移量。所以这不是 Joda Time 中的错误 - 这是您使用它的方式中的错误。

一种选择是创建一个DateTimeZone,它在您找到的偏移量处固定,并使用该区域格式化任何瞬间:

DateTimeZone fixedZone = DateTimeZone.forOffsetMillis(offset);
DateTimeFormatter format = DateTimeFormat.forPattern("ZZ")
.withZone(fixedZone);
System.out.println(format.print(0L)); // Value won't affect offset

关于java - JODATIME withZone 显示不正确的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289105/

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