微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 ColdFusion 中获取时区的偏移量

如何解决如何在 ColdFusion 中获取时区的偏移量

我需要获取 Adob​​e 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 举报,一经查实,本站将立刻删除。