如何存储我的日期?

时间:2012-02-08 09:11:25

标签: c# sql-server datetime utc

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

但我目前正在制作一个节目,我怀疑什么是存储我约会的最佳方式。在该计划中,用户可以在注册当天开始学习五个星期的课程。他每天都必须填写一份表格,该表格会在当天保存。

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

我曾经用DateTime存储表单数据,以计算它提交的日期,但我更改了它,因此它只保存相对的日期数(例如第5天)。

顺便说一下,我正在使用C#和SQL Server数据库。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果您的系统有功能要求能够与不同时区的用户合作,通常您希望以UTC格式存储。

假设您在香港有一位用户,而悉尼的用户正在查看同一事件。如果你想让他们看到他们的时区中的事件日期(和时间),那么我们可能需要将它存储在UTC中,然后呈现给用户尊重他们的地理位置。

如果您没有此类要求,则不进行此类转换,并且您只假设一个时区,然后您不需要在系统中添加更多复杂性,只需使用日期列并将当前日期存储在那里。

但如果你这样做 - 去参加UTC。在这种情况下,您将需要DateTime,而不仅仅是Date。这是因为在一个时区的21:30可以在另一个时区2:30 ,所以时间真的很重要。

向用户展示时,您可以将其转换为用户的时区,然后将时间浪费掉,但为了使转换正确,您需要留出时间。

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

var utcNow = DateTime.Now.ToUniversalTime();

还有一个属性:

var utcNow = DateTime.UtcNow;

<强> EDITED

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

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