1

日付/時刻を Unix エポック時間で保存する C# の SQLite3 データベースからデータをクエリして取得しています

一部は、1970 年 1 月 1 日からの秒数として保存されます。

また、一部は 2001 年 1 月 1 日からの秒数として保存されます。

私のクエリは違いを理解し、正しい日付/時刻変換を適用できるので、これはすべて問題ありません

ただし、夏時間を組み込むためにこれを行う方法を理解できません

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";
4

1 に答える 1

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時間を変換するタイムゾーンを作成する必要があります。

于 2012-04-12T04:06:49.940 に答える