[英]Parse Date and Time in specific format
我正在獲取以下格式的時間戳字符串-
2015-02-01T12:11:06Z
我需要將其轉換為DateTime對象。 我為此嘗試了以下代碼-
timestamp = DateTime.ParseExact(attr.Value,"yyyy-MM-ddThh:mm:ss",null);
但這引發了異常。
System.FormatException:字符串未被識別為有效的DateTime。
在System.DateTimeParse.ParseExact(String s,String format,DateTimeFormatInfo dtfi,DateTimeStyles樣式)
在System.DateTime.ParseExact(String s,String format,IFormatProvider provider)
我知道我的格式是錯誤的。 有什么辦法可以使其工作?
更新資料
J. Steen的方法對我有用,他是第一個發表評論的人,但是SonerGönül提供了更好的解釋和更好的方法,因此,我接受此處提到的SonerGönül的回答,並且J. Steen對此表示同意。 感謝你們倆。 無論如何,我都支持所有正確答案。 :-)
您會忘記最后的Z
部分並將hh
更改為HH
;
string s = "2015-02-01T12:11:06Z";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt); // 01/02/2015 14:11:06
}
由於沒有自定義日期和時間格式Z
,因此解析方法將其視為字符文字。 但是在這種情況下,您的小時部分與OffSet
會有所不同,因為此操作OffSet
DateTimeKind
創建為Local
。 由於我當前的偏移量現在是+02:00
,它將生成14:11:06
,而不是12:11:06
string s = "2015-02-01T12:11:06";
DateTime dt;
if(DateTime.TryParseExact(s, "yyyy-MM-ddTHH:mm:ss", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt); // 01/02/2015 12:11:06
}
請注意,您提供的格式最后與Z
時區不匹配。 您應該添加一個后綴來匹配它。 例如: "yyyy-MM-ddThh:mm:ssZ"
。 順便說一句,FYI, Z代表祖魯語 ,其含義與UTC相同。
但最簡單的適合所有人的解決方案是DateTime.Parse(attr.Value)
。
您根本不需要格式字符串。 只是DateTime.Parse
,因為您的日期時間字符串已經是有效(且高度標准化)的日期時間格式。
timestamp = DateTime.Parse("2015-02-01T12:11:06Z",
CultureInfo.InvariantCulture,
DateTimeStyles.None);
效果很好。
在時間格式中,字母Z代表UTC時間,也稱為“祖魯”時間。
這意味着解析器會將時間字符串視為UTC時間,並且在解析時會將時間轉換為您的本地時區。
您可以按以下方式修改代碼來實現它,
使用時間戳= DateTime.ParseExact(attr.Value,“ yyyy-MM-ddThh:mm:ss Z ”,null);
您可以通過以下方法實現此目的:
Convert.ToDateTime("2015-02-01T12:11:06Z")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.