Get Current Time in Different Timezone

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • jehugaleahsa@gmail.com

    #1

    Get Current Time in Different Timezone

    Hello:

    I would like it so that the time displayed was always for CDT/CDS.
    Potentially, the application can be run at locations in Mountain Time
    or Central Time. This is what I have now:

    // get the UTC offset depending on day light savings
    double hourOffset = DateTime.Now.Is DaylightSavingT ime() ? -5 : -6;
    DateTimeOffset offset =
    DateTimeOffset. UtcNow.ToOffset (TimeSpan.FromH ours(hourOffset ));

    Essentially, is there a way to get the time in a particular timezone
    regardless of where the application is run?

    Thanks,
    Travis
  • christery@gmail.com

    #2
    Re: Get Current Time in Different Timezone

    On 12 Feb, 18:34, "jehugalea...@g mail.com" <jehugalea...@g mail.com>
    wrote:
    Hello:
    >
    I would like it so that the time displayed was always for CDT/CDS.
    Potentially, the application can be run at locations in Mountain Time
    or Central Time. This is what I have now:
    >
     // get the UTC offset depending on day light savings
    double hourOffset = DateTime.Now.Is DaylightSavingT ime() ? -5 : -6;
    DateTimeOffset offset =
    DateTimeOffset. UtcNow.ToOffset (TimeSpan.FromH ours(hourOffset ));
    >
    Essentially, is there a way to get the time in a particular timezone
    regardless of where the application is run?
    >
    Thanks,
    Travis
    I think u need to know where u are,,, and using that knowledge and
    accepting that NTP has corrected your clock, dont worry.
    OR With user interaction I think that can be a possibility - as in the
    user sets the clock right. Without, a GPS would be advisable.
    Never heard of mountain time, greenwitch OK but...nah...

    //CY

    Comment

    • jehugaleahsa@gmail.com

      #3
      Re: Get Current Time in Different Timezone

      On Feb 12, 10:57 am, christ...@gmail .com wrote:
      On 12 Feb, 18:34, "jehugalea...@g mail.com" <jehugalea...@g mail.com>
      wrote:
      >
      >
      >
      >
      >
      Hello:
      >
      I would like it so that the time displayed was always for CDT/CDS.
      Potentially, the application can be run at locations in Mountain Time
      or Central Time. This is what I have now:
      >
       // get the UTC offset depending on day light savings
      double hourOffset = DateTime.Now.Is DaylightSavingT ime() ? -5 : -6;
      DateTimeOffset offset =
      DateTimeOffset. UtcNow.ToOffset (TimeSpan.FromH ours(hourOffset ));
      >
      Essentially, is there a way to get the time in a particular timezone
      regardless of where the application is run?
      >
      Thanks,
      Travis
      >
      I think u need to know where u are,,, and using that knowledge and
      accepting that NTP has corrected your clock, dont worry.
      OR With user interaction I think that can be a possibility - as in the
      user sets the clock right. Without, a GPS would be advisable.
      Never heard of mountain time, greenwitch OK but...nah...
      >
      //CY- Hide quoted text -
      >
      - Show quoted text -
      Mountain time? Between Central and Pacific? Anyway, human intervention
      is not possible.

      Comment

      • Peter Duniho

        #4
        Re: Get Current Time in Different Timezone

        On Tue, 12 Feb 2008 09:34:50 -0800, jehugaleahsa@gm ail.com
        <jehugaleahsa@g mail.comwrote:
        I would like it so that the time displayed was always for CDT/CDS.
        Potentially, the application can be run at locations in Mountain Time
        or Central Time. This is what I have now:
        >
        // get the UTC offset depending on day light savings
        double hourOffset = DateTime.Now.Is DaylightSavingT ime() ? -5 : -6;
        DateTimeOffset offset =
        DateTimeOffset. UtcNow.ToOffset (TimeSpan.FromH ours(hourOffset ));
        >
        Essentially, is there a way to get the time in a particular timezone
        regardless of where the application is run?
        There's always a way. :)

        However, .NET does not, AFAIK, support this directly. It only knows two
        timezones: UTC, and your current local timezone. The API actually _looks_
        like it could support multiple timezones, if only there were a way to
        instantiate a new timezone object according to something other than the
        local settings, but I haven't seen anything like that yet.

        So you're stuck doing this manually for now. I would hope that in the
        future, .NET will include more broad support for timezones, but that
        future isn't here yet as far as I know.

        By the way, beware of the use of "IsDaylightSavi ngTime" when creating
        DateTime instances outside the local timezone. It will be relative to the
        local timezone, which of course may have different daylight saving time
        rules than the target timezone.

        Pete

        Comment

        • jehugaleahsa@gmail.com

          #5
          Re: Get Current Time in Different Timezone

          On Feb 12, 12:06 pm, "Peter Duniho" <NpOeStPe...@nn owslpianmk.com>
          wrote:
          On Tue, 12 Feb 2008 09:34:50 -0800, jehugalea...@gm ail.com  
          >
          <jehugalea...@g mail.comwrote:
          I would like it so that the time displayed was always for CDT/CDS.
          Potentially, the application can be run at locations in Mountain Time
          or Central Time. This is what I have now:
          >
           // get the UTC offset depending on day light savings
          double hourOffset = DateTime.Now.Is DaylightSavingT ime() ? -5 : -6;
          DateTimeOffset offset =
          DateTimeOffset. UtcNow.ToOffset (TimeSpan.FromH ours(hourOffset ));
          >
          Essentially, is there a way to get the time in a particular timezone
          regardless of where the application is run?
          >
          There's always a way.  :)
          >
          However, .NET does not, AFAIK, support this directly.  It only knows two 
          timezones: UTC, and your current local timezone.  The API actually _looks_  
          like it could support multiple timezones, if only there were a way to  
          instantiate a new timezone object according to something other than the  
          local settings, but I haven't seen anything like that yet.
          >
          So you're stuck doing this manually for now.  I would hope that in the  
          future, .NET will include more broad support for timezones, but that  
          future isn't here yet as far as I know.
          That stinks. I was reading a post somewhere else where they were using
          the registry to get all available Timezones. However, I am not sure
          how they figured out UTC offsets from that, nor how they handled Day
          Light Savings Time. I will just ignore it.
          >
          By the way, beware of the use of "IsDaylightSavi ngTime" when creating  
          DateTime instances outside the local timezone.  It will be relative to the  
          local timezone, which of course may have different daylight saving time  
          rules than the target timezone.
          Right. This was my biggest problem with my code. I am going to let it
          slide for now, since I can guarantee that the program will be in
          Mountain or Central time when run. I don't have to worry about there
          being alternate timezone rules within the US, I hope!
          >
          Pete

          Comment

          • =?ISO-8859-1?Q?Arne_Vajh=F8j?=

            #6
            Re: Get Current Time in Different Timezone

            jehugaleahsa@gm ail.com wrote:
            On Feb 12, 12:21 pm, Jon Skeet [C# MVP] <sk...@pobox.co mwrote:
            >Peter Duniho <NpOeStPe...@nn owslpianmk.comw rote:
            >>However, .NET does not, AFAIK, support this directly. It only knows two
            >>timezones: UTC, and your current local timezone. The API actually _looks_
            >>like it could support multiple timezones, if only there were a way to
            >>instantiate a new timezone object according to something other than the
            >>local settings, but I haven't seen anything like that yet.
            >Fortunately it's available as of .NET 3.5.
            >>
            >See DateTimeOffset (available in .NET 2.0 SP1) and TimeZoneInfo (3.5).
            >
            I was reading about that in my Nutshell book. How great it would be to
            live in a 3.5 world!
            Someone asked about timezone a couple of months ago.

            I came up with the following two potential solutions:

            public static int GetUTCOffset1(s tring target)
            {
            RegistryKey tzs =
            Registry.LocalM achine.OpenSubK ey("SOFTWARE"). OpenSubKey("Mic rosoft").OpenSu bKey("Windows
            NT").OpenSubKey ("CurrentVersio n").OpenSubKey( "Time Zones");
            foreach(string tzn in tzs.GetSubKeyNa mes())
            {
            if(tzn.Contains (target) ||

            ((string)tzs.Op enSubKey(tzn).G etValue("Displa y")).Contains(t arget))
            {
            return
            -BitConverter.To Int32((byte[])(tzs.OpenSubKe y(tzn).GetValue ("TZI")), 0);
            }
            }
            throw new ArgumentExcepti on("Unknown timezone " + target);
            }
            public static int GetUTCOffset2(s tring target)
            {
            java.util.TimeZ one tz = java.util.TimeZ one.getTimeZone (target);
            return tz.getRawOffset () / 60000;
            }

            Arne

            Comment

            • Claes Bergefall

              #7
              Re: Get Current Time in Different Timezone


              "Peter Duniho" <NpOeStPeAdM@nn owslpianmk.comw rote in message
              news:op.t6ffb3p a8jd0ej@petes-computer.local. ..
              On Tue, 12 Feb 2008 11:23:05 -0800, jehugaleahsa@gm ail.com
              <jehugaleahsa@g mail.comwrote:
              >
              >[...]
              >That stinks. I was reading a post somewhere else where they were using
              >the registry to get all available Timezones. However, I am not sure
              >how they figured out UTC offsets from that, nor how they handled Day
              >Light Savings Time. I will just ignore it.
              >
              I don't recall the format off the top of my head, but the timezone
              database in the registry is not all that complicated. Microsoft has a KB
              article on their support web site...
              You'll find that KB article here:


              Once you're grabbed all the timezones from the registry you can use
              SystemTimeToTzS pecificLocalTim e and
              TzSpecificLocal TimeToSystemTim e to convert betwen UTC and timezone specific
              local time

              The following code should help:

              [DllImport("kern el32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
              private static extern int SystemTimeToTzS pecificLocalTim e(ref
              TIME_ZONE_INFOR MATION lpTimeZone, ref SYSTEMTIME lpUniversalTIme , out
              SYSTEMTIME lpLocalTime);

              [DllImport("kern el32.dll", CharSet = CharSet.Auto, ExactSpelling = false)]
              private static extern int TzSpecificLocal TimeToSystemTim e(ref
              TIME_ZONE_INFOR MATION lpTimeZone, ref SYSTEMTIME lpLocalTime, out SYSTEMTIME
              lpUniversalTIme );

              [StructLayout(La youtKind.Sequen tial)]
              private struct SYSTEMTIME
              {
              public ushort wYear;
              public ushort wMonth;
              public ushort wDayOfWeek;
              public ushort wDay;
              public ushort wHour;
              public ushort wMinute;
              public ushort wSecond;
              public ushort wMilliseconds;
              }

              //Registry time zone format. See KB article Q115231
              [StructLayout(La youtKind.Sequen tial)]
              private struct REG_TIME_ZONE_I NFORMATION
              {
              public int Bias;
              public int StandardBias;
              public int DaylightBias;
              public SYSTEMTIME StandardDate;
              public SYSTEMTIME DaylightDate;
              }

              [StructLayout(La youtKind.Sequen tial, CharSet = CharSet.Unicode )]
              private struct TIME_ZONE_INFOR MATION
              {
              public int Bias;
              [MarshalAs(Unman agedType.ByValT Str, SizeConst = 32)]
              public string StandardName;
              public SYSTEMTIME StandardDate;
              public int StandardBias;
              [MarshalAs(Unman agedType.ByValT Str, SizeConst = 32)]
              public string DaylightName;
              public SYSTEMTIME DaylightDate;
              public int DaylightBias;
              }

              private static List<TIME_ZONE_ INFORMATIONGetT imeZones()
              {
              List<TIME_ZONE_ INFORMATIONlist = new List<TIME_ZONE_ INFORMATION>();
              RegistryKey key =
              Registry.LocalM achine.OpenSubK ey(@"SOFTWARE\M icrosoft\Window s
              NT\CurrentVersi on\Time Zones");
              if (key == null)
              return list;

              string[] subKeyNames = key.GetSubKeyNa mes();
              foreach (string subKeyName in subKeyNames)
              {
              RegistryKey subKey = key.OpenSubKey( subKeyName);
              if (subKey != null)
              {
              object value = subKey.GetValue ("TZI");
              if (value != null)
              {
              int length =
              Marshal.SizeOf( typeof(REG_TIME _ZONE_INFORMATI ON));
              IntPtr p = Marshal.AllocHG lobal(length);
              Marshal.Copy((b yte[])value, 0, p, length);
              REG_TIME_ZONE_I NFORMATION rtzi =
              (REG_TIME_ZONE_ INFORMATION)Mar shal.PtrToStruc ture(p,
              typeof(REG_TIME _ZONE_INFORMATI ON));
              Marshal.FreeHGl obal(p);

              TIME_ZONE_INFOR MATION tzi = new TIME_ZONE_INFOR MATION();
              tzi.Bias = rtzi.Bias;
              tzi.DaylightBia s = rtzi.DaylightBi as;
              tzi.StandardBia s = rtzi.StandardBi as;
              tzi.DaylightDat e = rtzi.DaylightDa te;
              tzi.StandardDat e = rtzi.StandardDa te;
              tzi.DaylightNam e = (string)subKey. GetValue("Dlt", "");
              tzi.StandardNam e = (string)subKey. GetValue("Std", "");
              list.Add(tzi);
              }
              subKey.Close();
              }
              }
              key.Close();
              return list;
              }


              /claes


              Comment

              Working...