Jake,

 

I have a vb project that auto detects Time Zone and Day Light Savings Time..
I found these JS files online and they seem to work great..

 

TimeZoneDetection.js   :

 

                //Provided by
http://www.michaelapproved.com/articles/timezone-detect-and-ignore-daylight-
saving-time-dst/

function TimezoneDetect() {

    var dtDate = new Date('1/1/' + (new Date()).getUTCFullYear());

    var intOffset = 10000; //set initial offset high so it is adjusted on
the first attempt

    var intMonth;

    var intHoursUtc;

    var intHours;

    var intDaysMultiplyBy;

 

    //go through each month to find the lowest offset to account for DST

    for (intMonth = 0; intMonth < 12; intMonth++) {

        //go to the next month

        dtDate.setUTCMonth(dtDate.getUTCMonth() + 1);

 

        //To ignore daylight saving time look for the lowest offset.

        //Since, during DST, the clock moves forward, it'll be a bigger
number.

        if (intOffset > (dtDate.getTimezoneOffset() * (-1))) {

            intOffset = (dtDate.getTimezoneOffset() * (-1));

        }

    }

 

    return intOffset;

}

 

 

DSTDetection.js    :

                // provided by
http://www.michaelapproved.com/articles/daylight-saving-time-dst-detect/

//Find start and end of DST

function DstDetect() {

    var dtDstDetect = new Date();

    var dtDstStart = '';

    var dtDstEnd = '';

    var dtDstStartHold = ''; //Temp date hold

    var intYearDayCount = 732; //366 (include leap year) * 2 (for two years)

    var intHourOfYear = 1;

    var intDayOfYear;

    var intOffset = TimezoneDetect(); //Custom function. Make sure you
include it.

 

    //Start from a year ago to make sure we include any previously starting
DST

    dtDstDetect = new Date()

    dtDstDetect.setUTCFullYear(dtDstDetect.getUTCFullYear() - 1);

    dtDstDetect.setUTCHours(0, 0, 0, 0);

 

    //Going hour by hour through the year will detect DST with shorter code
but that could result in 8760

    //FOR loops and several seconds of script execution time. Longer code
narrows this down a little.

    //Go one day at a time and find out approx time of DST and if there even
is DST on this computer.

    //Also need to make sure we catch the most current start and end cycle.

    for (intDayOfYear = 1; intDayOfYear <= intYearDayCount; intDayOfYear++)
{

        dtDstDetect.setUTCDate(dtDstDetect.getUTCDate() + 1);

 

        if ((dtDstDetect.getTimezoneOffset() * (-1)) != intOffset &&
dtDstStartHold == '') {

            dtDstStartHold = new Date(dtDstDetect);

        }

        if ((dtDstDetect.getTimezoneOffset() * (-1)) == intOffset &&
dtDstStartHold != '') {

            dtDstStart = new Date(dtDstStartHold);

            dtDstEnd = new Date(dtDstDetect);

            dtDstStartHold = '';

 

            //DST is being used in this timezone. Narrow the time down to
the exact hour the change happens

            //Remove 48 hours (a few extra to be on safe side) from the
start/end date and find the exact change point

            //Go hour by hour until a change in the timezone offset is
detected.

            dtDstStart.setUTCHours(dtDstStart.getUTCHours() - 48);

            dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() - 48);

 

            //First find when DST starts

            for (intHourOfYear = 1; intHourOfYear <= 48; intHourOfYear++) {

                dtDstStart.setUTCHours(dtDstStart.getUTCHours() + 1);

 

                //If we found it then exit the loop. dtDstStart will have
the correct value left in it.

                if ((dtDstStart.getTimezoneOffset() * (-1)) != intOffset) {

                    break;

                }

            }

 

            //Now find out when DST ends

            for (intHourOfYear = 1; intHourOfYear <= 48; intHourOfYear++) {

                dtDstEnd.setUTCHours(dtDstEnd.getUTCHours() + 1);

 

                //If we found it then exit the loop. dtDstEnd will have the
correct value left in it.

                if ((dtDstEnd.getTimezoneOffset() * (-1)) != (intOffset +
60)) {

                    break;

                }

            }

 

            //Check if DST is currently on for this time frame. If it is
then return these values.

            //If not then keep going. The function will either return the
last values collected

            //or another value that is currently in effect

            if ((new Date()).getTime() >= dtDstStart.getTime() && (new
Date()).getTime() <= dtDstEnd.getTime()) {

                return new Array(dtDstStart, dtDstEnd);

            }

 

        }

    }

    return new Array(dtDstStart, dtDstEnd);

}

 

 

Hopefully this will help your situation ?

 

From: android-developers@googlegroups.com
[mailto:android-developers@googlegroups.com] On Behalf Of String
Sent: Saturday, April 23, 2011 11:41 AM
To: android-developers@googlegroups.com
Subject: [android-developers] Re: Timezone Question

 

No offense, Bob (and I do mean that, I value your posts on this forum), but
I think we can safely assume that the OP knows how to calculate times of
sunrise and sunset. He's already showing that in his app, from the sound of
things, and is probably doing OK with that aspect.

 

The issue at hand is how (and maybe whether) to work around a user having
set their phone to a different zone than the one they're actually in. Nobody
says this is affecting the absolute (UTC) time of sunrise/sunset in the
calculations, it's purely about display. 

 

String

 

 

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to