2012-03-20 12 views
-1

DateTime time = DateTime.Now;を使用して現在時刻を取得できますが、この時刻をTimeZoneInfoと比較して、米国のUTCオフセットを使用して同じ時刻を取得します。現在の時刻が米国のタイムゾーンにあるかどうかを確認する方法

基本的に、提供された時間は、米国(ハワイとアラスカを含む)に関連付けられた6つのタイムゾーンの1つに含まれていることを知りたいと思います。

+0

米国州、ハワイとアラスカを数え、リーであります6つのタイムゾーンがあります。あなたは大陸アメリカだけを指していますか? – psubsee2003

+0

米国は実際にタイムゾーンを所有していません。あなたが本当に知りたいのは、interestedTimeがUTC -5からUTC -10までのどこかにあるかどうかです。これは6つのタイムゾーンであることに注意してください。ハワイとアラスカを除外すると、UTC -5〜UTC-8の4つのゾーンがあります。 – Bob2Chiv

+0

私たちはどうすれば助けますか?あなたはあなたがしたいことを既に知っているように聞こえます。ちょうどそれをやってください。 –

答えて

1

私はあなたが発行した場合、あなたはインターネットからそれを得ることができます。あなたは以下の機能をチェックします。

 DateTime DT = GetNISTDate(true); 
     MessageBox.Show(DT.ToString()); 

    public static DateTime GetNISTDate(bool convertToLocalTime) 
    { 
     Random ran = new Random(DateTime.Now.Millisecond); 
     DateTime date = DateTime.Today; 
     string serverResponse = string.Empty; 
     // Represents the list of NIST servers 
     string[] servers = new string[] { 
        "64.90.182.55", 
        "206.246.118.250", 
        "207.200.81.113", 
        "128.138.188.172", 
        "64.113.32.5", 
        "64.147.116.229", 
        "64.125.78.85", 
        "128.138.188.172" 
         }; 

     // Try each server in random order to avoid blocked requests due to too frequent request 
     for (int i = 0; i < 5; i++) 
     { 
      try 
      { 
       // Open a StreamReader to a random time server 
       StreamReader reader = new StreamReader(new System.Net.Sockets.TcpClient(servers[ran.Next(0, servers.Length)], 13).GetStream()); 
       serverResponse = reader.ReadToEnd(); 
       reader.Close(); 

       // Check to see that the signiture is there 

       if (serverResponse.Length > 47 && serverResponse.Substring(38, 9).Equals("UTC(NIST)")) 
       { 
        // Parse the date 
        int jd = int.Parse(serverResponse.Substring(1, 5)); 
        int yr = int.Parse(serverResponse.Substring(7, 2)); 
        int mo = int.Parse(serverResponse.Substring(10, 2)); 
        int dy = int.Parse(serverResponse.Substring(13, 2)); 
        int hr = int.Parse(serverResponse.Substring(16, 2)); 
        int mm = int.Parse(serverResponse.Substring(19, 2)); 
        int sc = int.Parse(serverResponse.Substring(22, 2)); 

        if (jd > 51544) 
         yr += 2000; 
        else 
         yr += 1999; 
        date = new DateTime(yr, mo, dy, hr, mm, sc); 

        // Convert it to the current timezone if desired 
        if (convertToLocalTime) 
         date = date.ToLocalTime(); 
        // Exit the loop 
        break; 
       } 
      } 
      catch 
      { 
       /* Do Nothing...try the next server */ 
      } 
     } 
     return date; 
    } 
2

あなたが必要としていることはすでに分かっているようです。

var currentTime = DateTime.Now();は、現在のシステム時刻を返します。

var zone = TimeZoneInfo.Local;は、現在のシステムタイムゾーンを提供します。標準時(冬)のUTC-5〜UTC-10、夏時間のUTC-4〜UTC-10をタイムゾーンと比較するだけです。

しかし、あなたのコメントを見るだけで、時間が米国のタイムゾーンの1つに入っているからといって、それが米国にあるわけではありません。北米と南米に同じタイムゾーンを持つ国がたくさんあります。

+0

これは私が言及しようとしていたものです。私は 'TimeZoneInfo'に慣れていませんでした。 +1名誉; 'DateTime.Now.ToUniversalTime()' – Bob2Chiv

+0

@ psubsee2003を使用してオフセットを取得しようとしていました。同意します。真剣に私は困っている!私はWindows Phone 7でアプリケーションを作成しています。現在の国名を表示したいのですが! – vir

+0

@ vir_28私はWin7の携帯電話の開発者は一度もやっていませんが、GPS情報にアクセスして逆ジオコーディングを行うと、 – psubsee2003

2

これは何をしたいあなたを取得し、他のタイムゾーンを取得する方法の例として役立つはずです。

class Program 
{ 
    static void PrintTime(string timeZoneId) 
    { 
     Console.WriteLine( 
      TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.UtcNow, 
       timeZoneId).ToShortTimeString() + 
      " is the time in " + timeZoneId); 
    } 

    public static void Main() 
    { 
     PrintTime("Hawaiian Standard Time"); 
     PrintTime("Alaskan Standard Time"); 
     PrintTime("Pacific Standard Time"); 
     PrintTime("US Mountain Standard Time"); 
     PrintTime("Central Standard Time"); 
     PrintTime("US Eastern Standard Time"); 
    } 
} 
関連する問題