SQLite 查询,用于转换 Unix 纪元日期/时间,并在 C# 中使用 DST

本文关键字:并在 DST 时间 日期 用于 查询 转换 Unix SQLite 纪元 | 更新日期: 2023-09-27 18:30:53

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

有些存储为自 01/01/1970 以来的秒数

有些存储为自 01/01/2001 以来的秒数

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

但是,我无法找到一种方法来合并夏令时

有没有办法区分 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";

SQLite 查询,用于转换 Unix 纪元日期/时间,并在 C# 中使用 DST

如果存储在数据库中的时间是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 时间转换为的时区。

相关文章: