Excel日期时间,偏移到C#DateTime

时间:2014-08-19 13:42:52

标签: c# datetime datetimeoffset

我有一张excel表,上面有一个日期,我使用一些JavaScript或VBA(没关系)。

然后我最终得到一个如下所示的日期:"Tue Feb 4 00:00:00 UTC+0100 2014"

是否有任何版本可以将其转换为C#DateTime?正如您所看到的那样,我不会使用时间部分,因此也不会关心UTC偏移。

1 个答案:

答案 0 :(得分:6)

  

是否有任何版本可以将其转换为C#DateTime?

当然!您可以使用DateTime.TryParseExactDateTime.ParseExact方法来解析字符串。

string s = "Tue Feb 4 00:00:00 UTC+0100 2014";
DateTime dt;
if(DateTime.TryParseExact(s, "ddd MMM d HH:mm:ss 'UTC+0100' yyyy", 
                          CultureInfo.InvariantCulture,
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt);
}

但是当字符串具有offset值时,请不要使用此方式。

Custom Date and Time Format Strings页面;如果您的字符串有签名偏移量,建议使用DateTimeOffset而不是DateTime

  

使用DateTime值,"zzz" custom format说明符代表。{   签署本地操作系统时区与UTC的偏移量,   以小时和分钟计。 它没有反映出一个人的价值   instance的DateTime.Kind属性。出于这个原因,“zzz”格式   建议不要将说明符与DateTime值一起使用。

     

使用DateTimeOffset值,此格式说明符表示   DateTimeOffset值与UTC的偏移量,以小时和分钟为单位。

string s = "Tue Feb 4 00:00:00 UTC+0100 2014";
DateTimeOffset dto;
if(DateTimeOffset.TryParseExact(s, "ddd MMM d HH:mm:ss 'UTC'zzz yyyy", 
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None, out dto))
{
    Console.WriteLine(dto);
}

然后您可convert DateTimeOffsetDateTime。因为DateTime不存储任何偏移值。没有这样的事情; “a DateTime,偏移量为1小时”