你如何计算夏令时?

3
我希望能够在用户提供的日期和时间向不同时区的用户发送通知。 我还没有实现任何内容,但是我计划创建一个时间戳列并将所有内容存储在UTC中。在提交时,用户将选择一个时区,我将计算偏移量,加到时间戳列中,就完成了。 但是,我的计划缺少DST。我无法确定用户是否处于DST状态。 如何解决这个问题?我需要额外的列吗?有比我计划的更好的方法吗?

为什么您无法找出用户是否处于夏令时?您是否实际上缺乏在应用程序中提供表单字段的能力,以读取“选择时区”和“自动处理夏令时”的信息——这在这些类型的应用程序中很常见。 - Shawn Holmes
@Shawn,我计划存储时区信息。例如:Joe想在纽约时间13:00收到一条消息。我的服务器将把这个时间存储为现在时间(Now())加上5小时,即18:00。我会存储当前服务器时间加上偏移量以及时区字符串。但是我找不到ColdFusion中能告诉我一个时区是否处于夏令时的函数。我需要这个信息来调整偏移量。就像我说的,我在摸索中,所以可能完全错了。我以前从未做过这个,所以不知道正确的方法。 - dee
我不知道如何处理 CF 中的“自动处理夏令时”部分。 - dee
下面的答案是正确的,我只是误解了你的措辞 - 你让它听起来像是(“我没有办法找到”),好像你在设计应用程序时受限于询问用户他们的时区/夏令时偏好。 - Shawn Holmes
1个回答

9
您可以使用Java TimeZone对象。
<cfset tzObj = createObject("java","java.util.TimeZone") >

您可以通过以下方式获取可用ID列表,例如“US/Pacific”

<cfset tzList = arrayToList(tzObj.getAvailableIDs()) >

如果您能将ID与用户区域/时区匹配,您可以执行以下操作:

tzToTest = "US/Pacific"
dateTotest = now()

<!--- determines if dateTotest in tzToTest is in DST --->
<cfset tz = tzObj.getTimeZone(tzToTest) />
<cfset isDaylightSavings = tz.inDaylightTime(dateTotest) />

那就是它了,巴里。干杯。我这样做听起来对吗? - dee
是的,如果您正在存储客户的时区,那么您应该拥有所需的一切。深入了解java.util.TimeZone,您会发现其中有许多其他有用的函数,特别是围绕UTC。干杯。 - Barry Jordan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接