如何解决如何在 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>
,
这应该会为您提供以小时为单位的 UTC 偏移量。我知道它适用于 Lucee,但也适用于 ACF。
var timeZone = getTimeZoneInfo("America/Phoenix");
WriteDump(timeZone.utcHourOffset);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。