关于使用 C# 读写 MongoDB 时涉及 DateTime 的问题

在C#操作MongoDB时,DateTime类型的转换容易引发问题,尤其是DateTimeKind的处理。MongoDB存储的DateTime始终为Utc,而序列化和反序列化时需要注意时区转换。本文介绍了DateTimeSerializer和DateTimeOffsetSerializer的使用,并提到了其他BSON数据库的处理方式。
摘要由CSDN通过智能技术生成

       使用 C# 读写 MongoDB 时,DateTime 常常在 Unspecified、Local 和 Utc 之间转换,搞不清楚的话很容易弄错。最近写程序弄错了两次,数据老是重复,刚开始一直找不到问题,浪费了两天时间,坑爹啊。今天查资料、写测试、找源码,整了两个多小时,终于搞清楚了。

关于 DateTimeKind

    // DateTimeKind.Local
    DateTime td = DateTime.Today; 

    // DateTimeKind.Unspecified  
    DateTime dt1 = new DateTime(1999, 1, 1); 
    // 输出:dt1:1999-01-01 00:00:00, Ticks:630507456000000000
    Console.WriteLine("dt1:{0}, Ticks:{1}", dt1, dt1.Ticks); 

    DateTime dt2 = new DateTime(1999, 1, 1, 0, 0, 0, DateTimeKind.Local);  
    // 输出:dt2:1999-01-01 00:00:00, Ticks:630507456000000000
    Console.WriteLine("dt2:{0}, Ticks:{1}", dt2, dt2.Ticks); 

    DateTime dt3 = new DateTime(1999, 1, 1, 0, 0, 0, DateTimeKind.Utc);  
    // 输出:dt3:1999-01-01 00:00:00, Ticks:630507456000000000
    Console.WriteLine("dt3:{0}, Ticks:{1}", dt3, dt3.Ticks); 

    Console.WriteLine(dt1 == dt2); // 输出:True  
    Console.WriteLine(dt1 == dt3); // 输出:True  
    Console.WriteLine(dt2 == dt3); // 输出:True

       查看 DateTime 源代码可知,虽然三个时间的 DateTimeKind 不同,但 Ticks 值是一样的,而 DateTi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值