使用 C# 将日期时间插入 Postgre

问题描述 投票:0回答:1

下面是我的代码:

        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();
            }
        }

enter image description here

为什么

DateTime.UtcNow
插入Postgre后会被修改,而
DateTime.Now
却不会? 将 UTC 时间戳存储在数据库上的最佳实践是什么?

c# postgresql datetime
1个回答
0
投票

如果将 DateTime.UtcNow 插入类型为 timestamptz 的列中,PostgreSQL 会假定 DateTime 位于本地时区(如果 DateTimeKind 未指定)并将其转换为 UTC。这可能会导致时间的明显“修改”。

© www.soinside.com 2019 - 2024. All rights reserved.