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