gpt4 book ai didi

c# - DateTime 是否适合仅存储日期?

转载 作者:太空宇宙 更新时间:2023-11-03 13:11:58 24 4
gpt4 key购买 nike

我正在设计一个包含简单“tickler file”的应用程序:

  • 用户可以为自己创建笔记,每个笔记都有一个附加日期。
  • 用户可以要求应用程序“检查记事簿文件”——这会列出所有已保存且日期与今天或更早匹配的笔记。
  • 为了确定“今天”,应用程序只相信操作系统声明的当前日期。

这意味着所有与时区相关的并发症都将被忽略。应用程序的行为就像只有一个时区一样,因此通过更改时区可能会引入意外行为。这是设计使然:我正在尝试模拟一个物理记事本文件,它会遇到同样的问题。

我对应该使用什么数据类型来存储日期信息感到困惑。我应该使用 DateTime,还是自己制作 struct Date { public Day;公众月;公众年; }?

我知道 using the DateTime.Date property .但是,DateTime 在内部将数据存储为 ticks since midnight 1/1 on 1 AD .这意味着不可能将日期实际存储在 DateTime 中,因为每个日期都存储为该日期的一个瞬间。当我们开始谈论瞬间时,似乎我们现在必须处理与时区相关的复杂问题。

例如,假设伦敦的一位用户在 2016 年 1 月 1 日晚上 11 点创建了一条应该在 2016 年 1 月 7 日恢复的笔记。然后该用户前往阿拉斯加(并且他的计算机自动从 UTC 切换到AKST),并在 2016 年 1 月 6 日,本地时间晚上 10 点,列出了为“今天”保存的笔记。从技术上讲,现在是笔记原始时区的 2016 年 1 月 7 日,因此任务应该会出现。但它只是用户时区的 1 月 6 日,所以它不应该出现。

MSDN 好像是echo my concern :

Because the DateTime type represents both dates and times in a single type, it is important to avoid misinterpreting a date returned by the Date property as a date and time.

但我究竟应该如何确保我不会误解日期?

最佳答案

是的,将日期存储在日期时间结构中是合适的。您需要考虑的是日期的存储 和日期的显示 之间的分离。您应该使用 UTC 来存储日期(使用 DateTime.UtcNow 而不是 DateTime.Now),并且通过这样做,时区永远不会有问题,因为 UTC 会跟踪与其他时区的偏移量。当您为用户显示日期时,您可以使用时区相关数据并显示该时区的正确日期。显示日期时可以使用 DateTime.ToLocalTime 方法。

关于c# - DateTime 是否适合仅存储日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28144229/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com