如何将此UTC datetime字符串转换为datetime对象c#

如何将此UTC datetime字符串转换为datetime对象c#,c#,datetime,utc,C#,Datetime,Utc,我一直在尝试将这个字符串转换为C中的DateTime对象# 2019-09-23T08:34:00UTC+1 我尝试过使用DateTime.Parse,但它引发了一个异常 “字符串未被识别为有效的日期时间。” 使用TryParseExact将字符串转换为日期时间。下面是将给定格式转换为datetime的示例代码 private static DateTime ParseDate(字符串providedDate){ 日期时间有效期; 字符串[]格式={ “yyyy-MM ddTHH:MM:ss”

我一直在尝试将这个字符串转换为C中的DateTime对象#

2019-09-23T08:34:00UTC+1

我尝试过使用DateTime.Parse,但它引发了一个异常

“字符串未被识别为有效的日期时间。”


使用
TryParseExact
将字符串转换为日期时间。下面是将给定格式转换为datetime的示例代码

private static DateTime ParseDate(字符串providedDate){
日期时间有效期;
字符串[]格式={
“yyyy-MM ddTHH:MM:ss”
};
var dateFormatIsValid=DateTime.TryParseExact(
提供日期、格式、CultureInfo.InvariantCulture、DateTimeStyles.None、out validDate);
return dateFormatIsValid?validDate:DateTime.MinValue;
}
然后,使用此函数转换字符串。我将UTC+1替换为空字符串

static void Main(字符串[]args){
字符串strdatetime=“2019-09-23T08:34:00UTC+1”;
DateTime DateTime=ParseDate(strdatetime.Replace(“UTC+1”和“));
Console.WriteLine(日期时间);
}

很抱歉,你看起来像一个暴力的受害者

这是一种不寻常的格式,这就是为什么在我为您提出解决方案之前,我想说的第一件事是“如果可以的话,首先修复您的输入”

假设你不能修复你的输入,那么你需要考虑一些事情;

  • 首先,如果字符串有一些部分,如
    UTC
    和/或
    GMT
    ,则没有自定义的日期和时间格式说明符来解析它们。这就是为什么你需要作为一个
  • 其次,您的
    +1
    部分看起来像一个值。是解析它所需的,但请注意,此格式说明符不建议与
    DateTime
    值一起使用,因为它不反映实例属性的值
  • 作为
    DateTime
    的解决方案,您可以像我建议的那样解析它

    var s = "2019-09-23T08:34:00UTC+1";
    DateTime dt;
    if(DateTime.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
                              DateTimeStyles.AdjustToUniversal, out dt))
    {
        Console.WriteLine(dt);
    }
    
    它将
    2019-09-23 07:34:00
    作为
    DateTime
    提供,并将
    Utc
    作为
    Kind
    属性提供

    作为<代码> DeTeMeOffels<代码>的解决方案——因为您的字符串具有UTC偏移值,所以您应该考虑用这个来解析而不是<代码>日期时间<代码> -,作为Matt,您可以使用它来获取数据,如

    var s = "2019-09-23T08:34:00UTC+1";
    DateTimeOffset dto;
    if(DateTimeOffset.TryParseExact(s, "yyyy-MM-dd'T'HH:mm:ss'UTC'z", CultureInfo.InvariantCulture,
                              DateTimeStyles.None, out dto))
    {
        Console.WriteLine(dto.DateTime);
    }
    
    这将为您提供与
    .Kind
    属性相同的结果
    DateTime
    ,但
    未指定


    但是,我再次强烈建议您首先修正输入。

    这是否回答了您的问题?你能分享代码吗!否这会引发“字符串未被识别为有效日期时间”的异常。在字符串中看到UTC+1部分是不常见的。通常使用ISO8601格式…该字符串来自何处?如果您从字符串中删除UTC,则应感谢奎师那,这是有效的,但不考虑时间中的+1。我如何确保时间准确?原因是这是一个跟踪应用程序,我正在解析交付的ETA,所以UTA+1是important@SeanDavies您可以使用
    ParseDate(strdatetime.Replace(“UTC+1”和“”).ToUniversalTime()
    将日期转换为UTC时间。或者您可以简单地添加1小时
    ParseDate(strdatetime.Replace(“UTC+1”),添加小时数(1)
    Nice response.:)可能还建议将解析视为
    DateTimeOffset
    而不是
    DateTime
    @MattJohnson-Pint-Ups,完全忽略了这一点。非常感谢你,马特。还添加了该部分(: