转换为2015-06-01T02:31:00+;0000到DateTime对象c#
我正在编写一个使用此Web服务的应用程序: 如您所见,JSON对象带有一个utc日期时间字段。我想将此信息保存在一个简单的DateTime对象中,格式为“yyyy-MM-dd-HH:MM:ss” 这是我的代码:转换为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"],
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);