在事件为全局的c#中处理事件的开始和结束时间的最佳方法是什么

时间:2012-03-13 21:21:45

标签: c# datetime timezone globalization

我们正在制作一个应用程序,它将列出全球各地的活动。事件跨越多天。

我们希望存储事件的开始和结束。

我应该只使用2个DateTime属性并将其全部存储为UTC吗?

我们是否应该将2个时间点存储为时间点?

我们应该使用TimeSpan吗?

NodaTime会在这里好吗?

3 个答案:

答案 0 :(得分:1)

就个人而言,我会将所有内容存储为UTC时间。由于.NET自然支持将日期转换为UTC,因此您不必担心将来的兼容性。大多数数据库支持以UTC格式存储日期。在计算时间段时,我还会使用TimeSpan来获取代码可读性,但将日期时间存储为刻度可能会给您带来很小的性能优势,因为您可以在不创建DateTime对象的情况下进行比较。取决于你做了多少次比较。

答案 1 :(得分:0)

两个日期时间为UTC静止。因为当前正在进行事件,所以当你有一个开始而没有结束时进行操作是有意义的。如果您愿意,WCF甚至会自动为您提供本地时间(确保设置DateTime.Kind)。

DateTimes是内部的刻度,因此将它们存储为刻度线很少。他们将在你的数据库中休息。

答案 2 :(得分:0)

Tuple TimeSpan <long, long, long>;
TimeSpan myTimeSpan = new TimeSpan<start, end, difference>;

您使用点符号来访问类似的项目;     long start = myTimeSpan.item1; 第N项将被访问; myTimeSpan.itemN;

如果您需要UTC时间,可以通过这样的方式轻松获得。     DateTime startingUTC = new DateTime(myTimeSpan.item1,UTC);

这个建构者; public DateTime(long ticks,DateTimeKind kind)将允许您在需要向用户显示数据时以UTC或本地时间轻松生成DateTime对象。否则,使用刻度线会更容易,更有效。