设置DateTime最简单的字符串值是什么

时间:2016-02-28 08:44:31

标签: c# datetime

我试图找出让用户根据它们提供的一些字符串参数设置可移植类库的内部DateTime值的最佳方法。字符串参数必须是简单格式。

所以,现在我有一些考虑因素。

  1. 指定UTC偏移量足以获得正确的DateTime

    public static DateTime FromUtcOffset(string value) {     var utcDateTime = DateTime.UtcNow;     var offSet = TimeSpan.Parse(value);     return utcDateTime + offSet; }

  2. 或者指定TimeZone比UTC Offset具有一些优势

    TimeZoneInfo someTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); 
    DateTime convertTimeFromUtc = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, someTimeZone);
    
  3. 我的问题是:可以从用户那里获取正确的字符串参数,让他决定DateTime的值是什么?

    1. Utc Offset
    2. 时区
    3. 或其他任何不那么详细的替代方案。

1 个答案:

答案 0 :(得分:2)

实际上,这取决于:

  1. 您是否使用位于不同时区的网络主机
  2. 您是否存储将来使用它们的时间值
  3. 您的图书馆是否在本地工作(因此,了解用户的时区)
  4. 1 + 2基本上意味着你的时间偏移可能会改变。如果不是(该库仅供本地使用),请获取当地时间而不关心时间偏移。但是,如果偏移量可能会改变,通常以UTC格式存储“绝对”时间应该足够了。为此,您可以:

    1. 向用户询问UTC时间,而不是当地时间
      1. 询问当地时间+偏移量(或者如果可能,从当地时区获得偏移量)
      2. 将其转换为UTC时间并以UTC时间存储/处理
      3. 使用当地时间提供输出(如果没有改变则使用偏移量为1.)
      4. 在1和3中,您需要一个时区来计算时间偏移。如果您已经知道偏移量,则无需知道时区。而且,DateTime本身可以存储时间偏移信息。它还可以告诉您它是存储本地还是UTC时间(请参阅DateTime.Kind属性)。