我在C#中查询和检索SQLite3数据库中的数据,该数据库在Unix纪元时间存储其日期/时间
有些存储为自1970年1月1日起的秒数
有些存储为自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";
答案 0 :(得分: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时间的时区。