2012-03-20 79 views
-1

我能夠使用DateTime time = DateTime.Now;獲得當前時間,但我想將此時間與TimeZoneInfo進行比較,以獲得與美國提供的UTC時差相同的時間。如何檢查當前時間是否在美國時區

基本上,我想知道提供的時間在與美國(包括夏威夷和阿拉斯加州)相關的六個時區之一內。

+0

的美國州,計數夏威夷和阿拉斯加,是LEA 6個時區寬。你指的只是美國大陸嗎? – psubsee2003 2012-03-20 18:52:46

+0

美國實際上並不擁有時區;你真正想知道的是如果interestTime位於UTC -5到UTC -10(含)之間。請注意,這是6個時區。如果你排除夏威夷和阿拉斯加,那麼你有4個從UTC -5到UTC -8的區域。 – Bob2Chiv 2012-03-20 18:53:15

+0

我們可以提供什麼幫助?這聽起來像你已經知道你想做什麼...只是做到這一點。 – 2012-03-20 18:54:36

回答

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)夏令時UTC-4到UTC-10

然而,僅僅看看你的評論,只是因爲時間在美國的時區之內,並不意味着它在美國。在北美和南美有很多國家有相同的時區。

+0

這就是我想提到的;但我對'TimeZoneInfo'不熟悉; +1榮譽;我試圖使用 'DateTime.Now.ToUniversalTime()' – Bob2Chiv 2012-03-20 19:09:59

+0

@ psubsee2003獲得偏移量,我同意!認真的我有麻煩了!我在Windows Phone 7中創建了一個應用程序,並且我想在那裏顯示當前的國家/地區名稱! – vir 2012-03-20 19:21:40

+0

@ vir_28我從來沒有做過任何Win7手機開發,但我認爲這將是更容易訪問GPS信息,並做一些反向地理編碼,以獲得位置 – psubsee2003 2012-03-20 19:23:42

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"); 
    } 
} 
相關問題