time - 如何在 ColdFusion 中获取时区的偏移量
问题描述
我需要在 Adobe ColdFusion 中获取任何给定时区的偏移量(以小时为单位)。这个想法是通过一个时区(美国/凤凰城)并在考虑夏令时的情况下取回它的偏移量。
好吧,在寻找似乎永远的东西之后,我意识到 CF 没有办法做到这一点。您需要深入研究它的下腹部 (JAVA) 以获得您需要的东西。因此,在 Ben Nadel 的一篇关于时区的帖子的帮助下,我想通了,并决定将我学到的知识传授给有一天可能需要它的开发者同行。
解决方案
<cfscript>
/*
Author: Steve Holland (Avant Solutions Group)
Website: www.avantsolutionsgroup.com
License: https://opensource.org/licenses/MIT
*/
private struct function calcTZOffset(required string timeZoneID, boolean returnTimezones="false") {
// Init the timezome java class
var tz = createObject( "java", "java.util.TimeZone" );
// Get the timezone info
var tzInfo = tz.getTimeZone(
javaCast( "string", arguments.timeZoneID )
);
// Get the offset for the timezone
var tzOffset = tzInfo.getOffset(
javaCast("long", 0)
);
// Get the offset hours
var tzOffsetHours = tzOffset / 3600000;
//Check if the timezone is observing DST
var inDST = tzInfo.observesDaylightTime();
var tzOffsetHoursDST = inDST ? tzOffsetHours + 1 : tzOffsetHours;
//Return
var offset = {
inDST = inDST,
timeZone = arguments.timeZoneID,
offsetMillis = tzOffset,
offsetHours = tzOffsetHours,
dstOffsetHours = tzOffsetHoursDST,
timeZones = (arguments.returnTimezones)? tz.getAvailableIDs(): [] //Allow the user to return all the timezones (optional)
};
//writeOutput(tzOffset / 3600000);
return offset;
}
tzID = "America/Denver";
//tzID = "America/Phoenix";
//tzID = "America/Los_Angeles";
offset = calcTZOffset(tzID, false);
//Dump out the results
writeDump(var=offset);
</cfscript>
推荐阅读
- python-sphinx - 狮身人面像警告:“重复的替换定义名称” - 错误在哪里?
- parsing - Lexer 是否应该能够区分“变量”中包含的语法标记和实际的语法标记
- c++ - 我可以在 C++ 上设置用户输入的范围吗?
- javascript - JavaScript,承诺拒绝
- lua - 如何从字符串的特定部分打印文本?
- amazon-web-services - 如何为 AWS s3 存储桶的每个人添加写入权限
- r - 新手有一个关于数据框列名的问题
- linux - 在 Linux 上的 AWS Elastic Beanstalk 中部署多个 ASP.NET Core 应用程序(使用 Kestrel 服务器)
- python - win10toast python在通知中心更改程序标题
- docker - 在撰写文件中设置 docker 时无法连接到 selenium/chrome