2012-04-12 94 views
1

我查詢和C#中的SQLite3數據庫存儲它的日期/時間在Unix紀元時間檢索數據SQLite的查詢

一些被存儲爲數字幾秒鐘,因爲01/01/1970

而且由於01/01/2001

一些被存儲爲秒數這是所有罰款,我查詢自己看着辦的差異,應用正確的日期/時間轉換

但是我無法想象e一種方法,我可以這樣做,以合併夏令時

有沒有一種方法可以區分DST?
也有一種方法可以從Unix時代獲得時區嗎?

我使用的查詢是下面,任何幫助,這將是巨大的

string query = "SELECT case when date<978307200 then datetime(date + 978307200,'unixepoch') else datetime(date,'unixepoch') end 
AS [DATE/TIME] 
FROM message 
ORDER BY ROWID"; 

回答

0

如果存儲在數據庫中的時間是UTC,那麼你應該處理您的時間是這樣的:

namespace TimeProcessing 
{ 
    using System; 
    using System.Diagnostics; 
    using System.Globalization; 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      double timeStamp = 1000000000; // here you read real UNIX timespamp 

      // get UTC time 
      DateTime utc = ConvertFromUnixTimestamp(timeStamp); 
      Console.WriteLine("UTC time is: {0}", utc.ToString("o", CultureInfo.CurrentCulture)); 


      // get local time 
      DateTime local = TimeZone.CurrentTimeZone.ToLocalTime(utc); 
      Console.WriteLine("Local time is: {0}", local.ToString("o", CultureInfo.CurrentCulture)); 

      if(Debugger.IsAttached) 
      { 
       Console.WriteLine("Press any key to exit.."); 
       Console.ReadKey(); 
      } 
     } 

     // here you implement your timestamp processing algorithm 
     public static DateTime ConvertFromUnixTimestamp(double timestamp) 
     { 
      DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
      return origin.AddSeconds(timestamp); 
     } 
    } 
} 

所有DTS更改將自動應用。如果您需要將時間轉換爲其他時區(非本地),則算法將保持不變,但您需要使用TimeZoneInfo類創建要將UTC時間轉換到的時區。

+0

區別於DST我的意思是說明DST應該應用還是不應用的區別 – Daniel 2012-04-12 13:51:30

+0

我仍然不明白你在說什麼。儘管如此,解決方案也是一樣的。使用UTC時間,然後將其轉換爲本地,然後是必要的。 – 2012-04-12 13:58:46

+0

我正在閱讀的數據庫無法控制事物的存儲方式。所以它存儲日期,因爲它已被配置。當我在我的問題中用我的SELECT語句閱讀它時,它會返回正確的UTC日期和時間,接受所有有DST的時間,一個小時向前。他們顯示爲例如2012/03/26 01:09:32而不是2012/03/26 02:09:32 – Daniel 2012-04-12 14:25:38