使用DateTimeOffset.TryParseExact遇到AM / PM问题

时间:2018-10-23 16:45:04

标签: c# datetimeoffset

我有一些要在有效时间内测试的代码,由于某种原因,它适用于PM而非AM的日期。

所以我采用的是与此格式相对应的格式:

2018/6/1下午12:00:00

但是由于某种原因,这在PM时效果很好,但是当我将其替换为AM时,它就坏了。我接受的可接受格式为:

M / d / yyyy HH:mm:ss tt

以下内容无法说明其错误:

      DateTimeOffset dateTimeResult;
        var acceptableFormats = new string[] {
                            "yyyy-MM-dd'T'HH:mm:ss.FFFK",
                            "M/d/yyyy HH:mm:ss",
                            "MM/dd/yyyy HH:mm:ss",
                            "M/d/yyyy HH:mm:ss tt",
                            "MM/dd/yyyy HH:mm:ss tt",
                            "yyyy-MM-dd' 'HH:mm:ss.FFFK",
                            "yyyy-MM-dd'T'HH:mm:ssK",
                            "yyyy-MM-dd' 'HH:mm:ssK",
                            "yyyy-MM-dd'T'HH:mm:ss",
                            "yyyy-MM-dd' 'HH:mm:ss",
                            "yyyy-MM-dd'T'HH:mm",
                            "yyyy-MM-dd' 'HH:mm",
                            "yyyy-MM-dd'T'HH",
                            "yyyy-MM-dd' 'HH",
                            "yyyy-MM-dd",
                            "yyyy-MM-dd",
                            "yyyyMMdd",
                            "MM/dd/yyyy",
                            "M/d/yyyy",
                            "yyyy-MM",
                            "yyyy" };
        DateTimeOffset dateTimeResult;
        var timeOffset = DateTimeOffset.TryParseExact("6/1/2018 12:00:00 AM", acceptableFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeResult);

该作品说的是真的:

      DateTimeOffset dateTimeResult;
        var acceptableFormats = new string[] {
                            "yyyy-MM-dd'T'HH:mm:ss.FFFK",
                            "M/d/yyyy HH:mm:ss",
                            "MM/dd/yyyy HH:mm:ss",
                            "M/d/yyyy HH:mm:ss tt",
                            "MM/dd/yyyy HH:mm:ss tt",
                            "yyyy-MM-dd' 'HH:mm:ss.FFFK",
                            "yyyy-MM-dd'T'HH:mm:ssK",
                            "yyyy-MM-dd' 'HH:mm:ssK",
                            "yyyy-MM-dd'T'HH:mm:ss",
                            "yyyy-MM-dd' 'HH:mm:ss",
                            "yyyy-MM-dd'T'HH:mm",
                            "yyyy-MM-dd' 'HH:mm",
                            "yyyy-MM-dd'T'HH",
                            "yyyy-MM-dd' 'HH",
                            "yyyy-MM-dd",
                            "yyyy-MM-dd",
                            "yyyyMMdd",
                            "MM/dd/yyyy",
                            "M/d/yyyy",
                            "yyyy-MM",
                            "yyyy" };
        DateTimeOffset dateTimeResult;
        var timeOffset = DateTimeOffset.TryParseExact("6/1/2018 12:00:00 PM", acceptableFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTimeResult);

1 个答案:

答案 0 :(得分:2)

出现此问题的原因是因为您的格式要求使用24小时制。 12在24小时内始终表示“中午”。您不能因为“ AM is only for times between midnight and noon (exclusive)”而“中午AM”。

此行由于输入格式无效而引发异常:

DateTimeOffset.ParseExact("6/1/2018 12:00:00 AM", "M/d/yyyy HH:mm:ss tt", 
    CultureInfo.InvariantCulture)

如果我将HH更改为hh,那么它会起作用:

DateTimeOffset.ParseExact("6/1/2018 12:00:00 AM", "M/d/yyyy hh:mm:ss tt", 
    CultureInfo.InvariantCulture)

// returns a valid DateTimeOffset object, which in
// my culture is displayed as '6/1/2018 12:00:00 AM -04:00'
// (I happen to be in -4 UTC)