下面是我的代码:
static void Main(string[] args)
{
DateTime dt1 = DateTime.Now.AddHours(-8); //My local time zone is UTC+8
DateTime dt2 = DateTime.UtcNow;
Console.WriteLine($"dt1:{dt1} | dt2:{dt2}"); //dt1:2024-05-10 09:46:10 AM | dt2:2024-05-10 09:46:10 AM
insertDemo(dt1,dt1);
insertDemo(dt2,dt2);
}
public static void insertDemo(DateTime ts,DateTime tsz)
{
string connString = "...";
using (var conn = new NpgsqlConnection(connString))
{
conn.Open();
using (var command = new NpgsqlCommand("INSERT INTO demo VALUES (@ts,@tsz)", conn))
{
command.Parameters.AddWithValue("ts", ts);
command.Parameters.AddWithValue("tsz", tsz);
command.ExecuteNonQuery();
}
conn.Close();
}
}
为什么
DateTime.UtcNow
插入Postgre后会被修改,而DateTime.Now
却不会?
将 UTC 时间戳存储在数据库上的最佳实践是什么?
如果将 DateTime.UtcNow 插入类型为 timestamptz 的列中,PostgreSQL 会假定 DateTime 位于本地时区(如果 DateTimeKind 未指定)并将其转换为 UTC。这可能会导致时间的明显“修改”。