转换为2015-06-01T02:31:00+;0000到DateTime对象c#

转换为2015-06-01T02:31:00+;0000到DateTime对象c#,c#,json,date,datetime,utc,C#,Json,Date,Datetime,Utc,我正在编写一个使用此Web服务的应用程序: 如您所见,JSON对象带有一个utc日期时间字段。我想将此信息保存在一个简单的DateTime对象中,格式为“yyyy-MM-dd-HH:MM:ss” 这是我的代码: DateTime dateParsed = DateTime.Now; DateTime.TryParseExact((string)resource.SelectToken("resource").SelectToken("fields")["utctime"],

我正在编写一个使用此Web服务的应用程序:

如您所见,JSON对象带有一个utc日期时间字段。我想将此信息保存在一个简单的DateTime对象中,格式为“yyyy-MM-dd-HH:MM:ss”

这是我的代码:

 DateTime dateParsed = DateTime.Now;       
 DateTime.TryParseExact((string)resource.SelectToken("resource").SelectToken("fields")["utctime"], "yyyy'-'MM'-'dd'T'HH':'mm':'ssz", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out dateParsed);
我在0001年初始化了一个DateTime对象


我做错了什么?

您的格式字符串中有一个错误。这是一个工作示例:

using System;
using System.Globalization;

public class Program
{
    public static void Main()
    {
        DateTime dateParsed = DateTime.Now; 
        if ( DateTime.TryParseExact( "2015-06-01T02:31:00+0000", "yyyy-MM-ddThh:mm:ss+0000", CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.AdjustToUniversal, out dateParsed ) ) {
            Console.WriteLine(string.Format("Parsing done: {0:MM/dd/yyyy @ hh:mm}", dateParsed ) );
        } else {
            Console.WriteLine("No result");
        }
    }
}
注意:
+0000
是硬编码的,当您获得其他值时,您需要检测它们。如果api只返回+0值,您可以将其切断,在没有z的情况下工作。

您应该使用(而不是
z

它将读取
+0000
作为偏移量。然后,通过使用
AdjustToUniversal
样式,生成的
DateTime
也将是通用时间,具有
DateTimeKind.Utc

此外,由于您是从已知的数据源读取数据,因此使用
TryParseExact
并没有任何实际好处。数据源中的格式是固定的,因此只需对该格式使用
ParseExact
Try…
方法主要用于验证用户输入,或者在源格式可能变化时验证用户输入


最后一点-如果您只是使用解析数据,那么应该自动识别该格式。您只需使用
DateTime
DateTimeOffset
属性,它就可以毫无问题地解析字符串。

最好使用标准DateTime.TryParse()解析字符串,将值作为DateTime类型存储在数据库中,并在必要时使用您需要的任何格式规范显示它。请注意,如果查看DateTime定义“在内部,所有DateTime值都表示为自0001年1月1日午夜12:00:00以来经过的滴答数(100纳秒间隔的数目)”,问题是您的TryParseExact是否解析了正确的日期和时间字段。
string s = "2015-06-01T04:41:10+0000";

DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd'T'HH:mm:ssK",
                                  CultureInfo.InvariantCulture,
                                  DateTimeStyles.AdjustToUniversal);