zoukankan      html  css  js  c++  java
  • .Net 6中的新数据结构DateOnly和TimeOnly(1)

    一直以来,在.net中是没有直接表示日期和时间的数据类型的,我们往往是通过DateTime和TimeSpan来替代。但这两个结构本身的作用范围是更宽的,使用时语义仍然不够明确。为了解决这个问题,在.net 6中引入了时间类型DateOnly和TimeOnly:

        var dateOnly = new DateOnly(2022, 1, 1);
        var timeOnly = new TimeOnly(11, 22, 0);

    它们的功能非常明确,表示日期和时间,具有更清晰的语义,使用起来更加直观。也能避免DateTime和TimeSpan中额外的功能带来的副作用。

    他们也能直接从DateTime中获取

        var now = DateTime.Now;
        var dateOnly = DateOnly.FromDateTime(now);
        var timeOnly = TimeOnly.FromDateTime(now);

    也能方便的转换为DateTime:

        var dateTime = dateOnly.ToDateTime(timeOnly);
    									

    这两个结构本身使用比较简单,网上也有不少文章介绍它,要更深入了解的朋友可以看下如下文章:

    生态问题

    我在项目中尝试使用了一下这两个结构,发现由于.net 6太新,第三方库并不能直接支持,而是当一个普通的struct来对待,和DateTime和TimeSpan这些老牌核心库一样方便的使用。

    就拿我直接接触到的来说,有如下场景不支持:

    1. Json.net并不能以友好的方式序列化和反序列化,也不方便作为接口交互
    2. Mongodb并不能将其作为时间或数值类型存储,除了显示不方便外,查询也是无法使用的。

    第三方库的限制影响了它们替换DateTime和TimeSpan的场景,不过好在它们本身是支持扩展的,在官方支持之前,我们是可以用一些自行扩展的方式来支持它们。我在下篇文章中将探讨下如何解决DateOnly和TimeOnly在Json序列化和Mongodb中读写的问题。

  • 相关阅读:
    Inside Dynamics Axapta源代码赏析(五)
    Inside Dynamics Axapta源代码赏析(二)
    PHP查询显示关键字为红色
    textarea自适应高度
    背景图只显示一次,不循环,另外还有一个是PHP下的换行显示
    PHP格式化时间,形如(Wed 30,Jul 2008)
    实现页面加载中。。
    c++关于设置精度
    HDOJ 2662
    live Messenger
  • 原文地址:https://www.cnblogs.com/TianFang/p/15763895.html
Copyright © 2011-2022 走看看