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

Tho*_*lle 2 c# datetime datetimeoffset

我有一张excel表,其中有一个日期,我使用一些JavaScript或VBA(没关系).

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

是否有任何版本的版本将其转换为C#DateTime?如您所见,我不使用时间部分,因此也不关心UTC偏移.

Son*_*nül 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);
}
Run Code Online (Sandbox Code Playgroud)

但是当字符串具有偏移值时,请勿使用此方法.

自定义日期和时间格式字符串页面; 如果您的字符串具有签名偏移量,则使用DateTimeOffset而不是DateTime建议使用.

对于DateTime值,"zzz"自定义格式说明符表示本地操作系统的时区与UTC的签名偏移量,以小时和分钟为单位.它不反映实例的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);
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以转换这个DateTimeOffsetDateTime.因为a DateTime不存储任何偏移值.没有这样的事情; "a DateTime偏移量为1小时"