Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换Unix历元日期/时间并在C中与DST一起使用的SQLite查询_C#_Sqlite_Timezone_Dst_Unix Timestamp - Fatal编程技术网

C# 转换Unix历元日期/时间并在C中与DST一起使用的SQLite查询

C# 转换Unix历元日期/时间并在C中与DST一起使用的SQLite查询,c#,sqlite,timezone,dst,unix-timestamp,C#,Sqlite,Timezone,Dst,Unix Timestamp,我正在用C查询和检索SQLite3数据库中的数据,该数据库将日期/时间存储在Unix时代 有些存储为自1970年1月1日以来的秒数 其中一些存储为自2001年1月1日起的秒数 这很好,因为我的查询可以计算出差异并应用正确的日期/时间转换 然而,我无法想出一种方法,我可以做到这一点,以纳入夏时制 有没有办法区分DST? 还有一种方法可以从Unix时代获取时区吗 下面是我正在使用的查询,对此有任何帮助都会很好 string query = "SELECT case when date<9783

我正在用C查询和检索SQLite3数据库中的数据,该数据库将日期/时间存储在Unix时代

有些存储为自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";

如果存储在数据库中的时间是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更改将自动应用。如果您需要将时间转换为其他非本地时区,算法将是相同的,但您需要使用类来创建要将UTC时间转换为的时区。

通过区分DST,我指的是告诉何时应该或不应该应用DST之间差异的查询。我不明白您想说什么。尽管如此,解决方案是相同的。使用UTC时间,然后根据需要将其转换为本地时间。我从中读取的数据库无法控制存储方式。因此,它将按照配置的方式存储日期。当我在问题中使用SELECT语句阅读时,它会返回正确的UTC日期和时间,以接受所有启用DST的时间,向前一小时。例如,它们显示为2012/03/26 01:09:32,而不是2012/03/26 02:09:32。数据库中的日期存储为UTC?@Daniel您应该在问题中指出,这一点很重要。请参阅我的最新答案。