C# 转换Unix历元日期/时间并在C中与DST一起使用的SQLite查询
我正在用C查询和检索SQLite3数据库中的数据,该数据库将日期/时间存储在Unix时代 有些存储为自1970年1月1日以来的秒数 其中一些存储为自2001年1月1日起的秒数 这很好,因为我的查询可以计算出差异并应用正确的日期/时间转换 然而,我无法想出一种方法,我可以做到这一点,以纳入夏时制 有没有办法区分DST? 还有一种方法可以从Unix时代获取时区吗 下面是我正在使用的查询,对此有任何帮助都会很好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
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您应该在问题中指出,这一点很重要。请参阅我的最新答案。