将亚马逊应用商店购买日期收据字符串解析为日期时间

Parsing amazon app store purchaseDate receipt string to DateTime

亚马逊应用商店的购买收据的购买日期格式为“Wed Feb 02 17:28:08 GMT+00:00 2022”,但我不确定如何将其正确转换为有效的 DateTime由于包含时区偏移。

DateTime.Parse("Wed Feb 02 17:28:08 GMT+00:00 2022");

标准 DateTime.Parse 函数只是抛出 FormatException: String was not recognized as a valid DateTime.

如何将此字符串解析为日期时间?

编辑:
评论建议 DateTimeOffset.Parse 但这也给出了相同的 FormatException

DateTimeOffset.Parse("Wed Feb 02 17:28:08 GMT+00:00 2022", CultureInfo.InvariantCulture);

您可以在 DateTimeOffset.ParseExact 中尝试传递预期的格式字符串。日期的正确格式字符串是 "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy":

var date = DateTimeOffset.ParseExact(dateString, 
                       "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
                       CultureInfo.InvariantCulture);

但是,如果 GMT 没有出现在字符串中,但其他一些 Timezome 字符串出现了,您仍然会遇到问题。您可以尝试 TryParseExact,如果它无法解析,则替换字符串中的时区字符(假设总是有 3 个字符 GMT、CST 等):

if (DateTimeOffset.TryParseExact(dateString,  
                                "ddd MMM dd HH:mm:ss 'GMT'zzz yyyy", 
                                CultureInfo.InvariantCulture, 
                                DateTimeStyles.None, 
                                out var dt))
{    
    // it worked
}
else 
{
    // try to replace the Timezone string
    var replaced = dateString.Replace(dateString.Substring(20, 3), "");
    date = DateTimeOffset.ParseExact(replaced, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture))
}

要使用 ParseExactTryParseExact,您需要在解析之前知道预期的格式字符串。