簡體   English   中英

以特定格式解析日期和時間

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM