设置 DateTime 的最简单的字符串值是啥
Posted
技术标签:
【中文标题】设置 DateTime 的最简单的字符串值是啥【英文标题】:What would be the simplest string value to set DateTime设置 DateTime 的最简单的字符串值是什么 【发布时间】:2016-06-11 08:44:32 【问题描述】:我试图找出让用户根据他们提供的一些字符串参数设置可移植类库的内部 DateTime 值的最佳方法。字符串参数必须是简单的格式。
所以,现在我有一些考虑。
指定 UTC 偏移量是否足以获得正确的日期时间
public static DateTime FromUtcOffset(字符串值) var utcDateTime = DateTime.UtcNow; var offSet = TimeSpan.Parse(value); 返回 utcDateTime + 偏移量;
或者指定时区比 UTC 偏移有一些优势
TimeZoneInfo someTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
DateTime convertTimeFromUtc = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, someTimeZone);
我的问题是:可以从用户那里获取什么正确的字符串参数来让他决定 DateTime 的值是什么?
-
UTC 偏移量
时区
或任何其他不那么冗长的替代方案。
【问题讨论】:
问题是什么?什么不起作用? 那么,您是否有一个用户并希望向他展示一个选择框,其中包含一些定义时区的选项并让他选择时区? 实际上它是一个类库,所以我想知道用户是否只提供 UTC 偏移量就足以设置库的内部 DateTime 或者是否有任何其他选项可以胜任。 时区与时间偏移不同。时区包含更多信息,例如夏令时。 @enkryptor 谢谢,这真的很有帮助。一定会记住这一点。我现在认为使用 TimeZone 将是正确的选择,但我无法在 PCL 环境中找到任何方法让我使用某个 TimeZone ID 获取 DateTime 值 【参考方案1】:实际上,这取决于:
-
您是否与位于不同时区的网络主机合作
您是否存储时间值以备将来使用
您的图书馆是否在本地工作(因此,知道用户的时区)
1+2 基本上意味着您的时间偏移是否可能会改变。如果不是(该库仅供本地使用),请获取本地时间并且不关心时间偏移。但是,如果偏移量可能发生变化,通常以 UTC 格式存储“绝对”时间就足够了。为此,您可以:
-
向用户询问 UTC 时间,而不是他们的当地时间
或
-
询问本地时间 + 偏移量(或从本地时区获取偏移量,如果可能)
将其转换为 UTC 时间并以 UTC 时间存储/处理
使用本地时间提供输出(使用从 1 开始的偏移量。如果它没有改变)
在 1 和 3 中,您需要一个时区来计算时间偏移。如果您已经知道偏移量,则不需要知道时区。而且,DateTime 本身可以存储时间偏移信息。它还可以告诉您它存储的是本地时间还是 UTC 时间(请参阅 DateTime.Kind 属性)。
【讨论】:
谢谢!我想几乎可以回答我的问题。以上是关于设置 DateTime 的最简单的字符串值是啥的主要内容,如果未能解决你的问题,请参考以下文章
当列值是 84 字节文本字段时,postgres 中保持列唯一的最有效方法是啥?