1

我正在从 C# 中的 SQLite3 数据库中查询和检索数据,该数据库将其日期/时间存储在 Unix 纪元时间中

有些存储为自 1970 年 1 月 1 日以来的秒数

有些存储为自 2001 年 1 月 1 日以来的秒数

这一切都很好,因为我的查询可以找出差异并应用正确的日期/时间转换

但是我无法想出一种方法来合并夏令时

有没有办法区分夏令时?
还有一种方法可以从 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 回答