[英]Convert 2015-06-01T02:31:00+0000 to DateTime object c#
我正在編寫一個使用此網絡服務的應用程序:
http://finance.yahoo.com/webservice/v1/symbols/allcurrencies/quote?format=json
正如您在那里看到的,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 對象。
我做錯了什么?
您應該使用K
自定義格式說明符(而不是z
)。
string s = "2015-06-01T04:41:10+0000";
DateTime dt = DateTime.ParseExact(s, "yyyy-MM-dd'T'HH:mm:ssK",
CultureInfo.InvariantCulture,
DateTimeStyles.AdjustToUniversal);
它將讀取+0000
作為偏移量。 然后通過使用AdjustToUniversal
樣式,生成的DateTime
也將使用世界時,具有DateTimeKind.Utc
。
此外,由於您是從已知數據源讀取數據,因此使用TryParseExact
並沒有真正的好處。 您的數據源的格式是固定的,因此只需將ParseExact
與該格式一起使用。 Try...
方法主要用於驗證用戶輸入,或者當源格式可能變化時。
最后一點 - 如果您只是使用JSON.net解析數據,則應自動識別該格式。 您只需使用DateTime
或DateTimeOffset
屬性,它就會毫無問題地解析它。
您的格式字符串中有一個錯誤。 這是一個工作示例:
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 的情況下工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.