gpt4 book ai didi

Coldfusion 2021 传递给日期函数 createDateTime 的日期值未指定或无效 - 在 createDateTime 函数中指定有效日期

转载 作者:行者123 更新时间:2023-12-05 04:29:20 25 4
gpt4 key购买 nike

<cfscript>
SetTimeZone("Asia/Karachi"); //same as our windows server timezone
</cfscript>

<cfoutput>
<cfset mydate = 'June 01, 2008'>
<cfset JobStartDate=CreateODBCDateTime(mydate)>
#JobStartDate#
</cfoutput>

错误:传递给日期函数 createDateTime 的日期值未指定或无效。在 createDateTime 函数中指定有效日期。

我在 Windows 服务器上使用 ColdFusion 2021(更新 4)。在 JVM details 下,Java Default Locale 是 en_US。

错误可以重现于:cffiddle.org

适用于其他日期,例如2008 年 7 月 1 日(正常)、2009 年 5 月 15 日(正常)等。但显示 2008 年 6 月 1 日(错误)和 2002 年 4 月 7 日(错误)的错误。 不确定是否还有其他日期。

附加说明:此问题是否与巴基斯坦的夏令时有关?

夏令时复兴

2008 年,巴基斯坦自 2002 年以来首次使用夏令时来解决其能源危机。 2008 年 5 月 31 日至 6 月 1 日午夜,时钟提前一小时(UTC+6)。巴基斯坦夏季高峰期需要夏令时,因为该国正在努力争取大约 4000 兆瓦的电力短缺。 (引用)[https://www.timeanddate.com/news/time/pakistan-extends-dst-2008.html]

如有任何帮助,我们将不胜感激。谢谢

最佳答案

恐怕(最初~)接受的答案是不正确的。问题完全归结于原始海报提到的夏令时问题。

原代码是这样的:

<cfset mydate = 'June 01, 2008'> 
<cfset JobStartDate=CreateODBCDateTime(mydate)>

如前所述,CreateODBCDateTime 需要一个日期/时间对象,而不是字符串,因此 CF 需要做的第一件事是将 'June 01, 2008' 转换为日期/时间,所以相当于:

<cfset mydate = createDateTime(2008,6,1,0,0,0)>

我在那里添加了小时、分钟和秒部分,因为它们是创建日期/时间 对象所必需的。您没有给它时间部分,因此 CF 必须在那里假设为零。

你猜怎么着?在 2008 年 6 月 1 日,根据巴基斯坦的夏令时规则,没有 00:00:00 这样的时间。午夜敲响时,时间向前分流到 01:00:00。因此错误:

Date value passed to date function createDateTime is unspecified or invalid

它准确地告诉您问题出在哪里。当尝试使用由于夏令时变幻莫测而不存在的时间时,人们总是会得到这个。这与试图将日期部分指定为“2 月 32 日”或更明显无效的内容完全相同。

出于同样的原因,在 2009-04-15 会出现相同的错误:那是那一年夏令时开始的时间。

这说明了为什么服务器 应始终设置为 UTC。时间上很少有“意外”的差距(尽管有奇怪的修正闰秒),所以这些问题根本不会出现。如果您使用 UTC,然后在必要时调整时区以供人类显示,CF 将始终正确显示。


还有一点。说代码在旧版本的 CF 中运行良好是不正确的(这出现在对早期答案的评论中)。 SetTimeZone 仅在 CF2021 的 ColdFusion 上添加到 CFML 中,并且问题中的代码在早期版本中出错。因此,无论您是否在旧版本的 CF 上经历/测试都不是这个问题。

关于Coldfusion 2021 传递给日期函数 createDateTime 的日期值未指定或无效 - 在 createDateTime 函数中指定有效日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72345620/

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