如何存储我的约会

本文关键字:我的 约会 存储 何存储 | 更新日期: 2023-09-27 18:23:38

我对Utc日期没有太多经验,但据我所知,在大多数情况下,它们是存储日期的最佳方式。

但我目前正在制定一个程序,我不确定什么是存储约会的最佳方式。在该程序中,用户可以从注册当天开始学习五周的课程。他每天都要填写一张表格,这些表格是为当天保存的。

目前,我正在将课程的StartDateEndDate保存为DateTime(没有Utc)。我应该将其保存为Utc吗?还是没有必要?因为我只需要当天(如果用户在2月8日10:04注册,系统只需要知道2月8号是课程的第一天。是否有更好的方法来存储这些信息?保存系统事件日期的最佳方法是什么(如用户登录、创建帐户等)?

我过去也用DateTime存储表单数据,以计算它是在哪一天提交的,但我更改了它,所以它只保存相对的天数(例如第5天)。

顺便说一句,我使用的是C#和SQL Server数据库。

如何存储我的约会

UTC(协调世界时)与日期的时间成分有关。这是存储DateTimes的标准方式,这样您就可以进行比较而不用担心时区。

如果你担心的只是日期组件&时区/位置不重要,您可以将其作为2012-02-01 00:00:00 存储在数据库中

您可以使用在.NET中获得仅限日期的组件

System.DateTime.Today;

或者,如果你正在与其他约会对象合作。。。

DateTime dt = DateTime.Now;
dt.Date; // <--- this will give the Date Component with the Time stripped back to 00:00:00

为什么不将日期存储在DATE数据库列中,而不必担心时区?

如果您的系统有功能要求能够与不同时区的用户一起工作,通常您希望存储在UTC中。

假设您有一个香港用户和一个悉尼用户在观看同一活动。如果你想让他们都在他们的时区中看到事件日期(和时间),那么我们就在这里,你可能需要将其存储在UTC中,然后向用户展示他们的地理位置。

如果您没有这样的要求,也不进行这样的转换,并且只假设一个时区,那么您就不需要在系统中增加更多的复杂性,只需使用"日期"列并将当前日期存储在那里即可。

但如果你这样做了,就选择UTC。在这种情况下,您将需要DateTime,而不仅仅是Date。这是因为一个时区的21:30可能是另一个时区第二天的2:30,所以时间真的很重要。

当向用户显示时,您可以将其转换为用户的时区,然后丢弃时间,但为了使转换正确,您需要保留时间。

在.NET中使用UTC很容易,DateTime有.ToUniversalTime()方法,可以将日期时间值转换为UTC:

var utcNow = DateTime.Now.ToUniversalTime();

还有一个属性:

var utcNow = DateTime.UtcNow;

已编辑

使用TimeZoneInfo静态类将日期时间从/转换为所需的时区(例如从UTC转换为指定用户的时区:

TimeZoneInfo.ConvertTimeToUtc(...)
TimeZoneInfo.ConvertTimeFromUtc(...)