【问题标题】:Input string not in correct format to parse into DateTime输入字符串格式不正确,无法解析为 DateTime
【发布时间】:2013-12-17 09:48:48
【问题描述】:

在 12 小时制机器上将 DataTime 转换为 Time 时遇到问题。以下代码在 24 小时制机器上运行良好。

(new DisplayReminder(_name, _displayText, _snoozTime, TimeSpan.Parse(_startTime.ToShortTimeString(), CultureInfo.InvariantCulture))).Show();

TimeSpan.Parse(_startTime.ToShortTimeString() 抛出输入字符串格式不正确的异常,这里我试图从 DateTime 值_startDate 中获取时间部分 关于这个问题的任何建议或解决方案。

【问题讨论】:

  • 这可能是因为上午/下午的文本,这在我想的时间跨度内并不适用。

标签: c# winforms parsing datetime


【解决方案1】:

目前尚不清楚您要做什么,但只是获取一天中的时间不应该涉及字符串转换:

TimeSpan time = _stateTime.TimeOfDay;

我强烈建议您避免字符串转换,除非它们固有是您想要实现的目标的一部分。

我个人不喜欢使用TimeSpan 作为一天中的时间,但这是适合你的 BCL。您可能还想查看我的 Noda Time 库,它对各种日期/时间概念进行了更清晰的区分。

【讨论】:

  • @AnkushMadankar:基类库。基本上是“开箱即用的 .NET 库”(不严格准确,但目前足够接近)。
  • 再次感谢您提供知识渊博的回复,我查看了 Noda Times 库,下载并使用它,但我无法完全按照预期使用它。但是这个解决方案效果很好。
【解决方案2】:

试试这个:

TimeSpan.ParseExact(
         _startTime.ToString("hh:mm:ss"), "hh:mm:ss",
                          System.Globalization.CultureInfo.InvariantCulture);

它会将您的日期格式化为与TimeSpan.ParseExact 接受的相同格式,因此它可以在任何机器上运行(我假设_startTime 是DateTime

【讨论】:

    【解决方案3】:

    试试

    startTime.TimeOfDay.ToString()
    

    【讨论】:

    • 什么?您已经有了 TimeOfDay 的时间跨度,为什么将其转换为字符串然后再转换回来,只是再次将其转换为字符串?
    【解决方案4】:

    我很确定它在 24H 时工作正常,但在 12H 系统中崩溃,因为“PM”“AM”部分!摆脱它你会很安全 11:54:33 PM 和23:54:33 在处理上差别很大

    编辑 它可能不是最好的解决方案,但如果您剪切字符串的最后一个索引,它会起作用:

        int index = _StartTime.IndexOf("M");
        if (index >= 0) 
    {
    _StartTime = _StartTime.Substring(0, index-1);
    switch (_StartTime.IndexOf("P"))
    case : -1
     _StartTime = _StartTime.Substring(0,_StartTime.Length);
     break;
    
    default:
     string hours = _startTime.Substring(_StartTime.Length-8,2);
     int H = Convert.ToInt32(hours);
     H += 12;
     string result = _StartTime.Substring(0, _StartTime.Length-8)+ Convert.ToString(H)+_startTime.Substring(_StartTime.Length-6);
    
    _StartTime = result;
    break;
    }
    

    这将丢弃 AM/PM,您可以在此之后使用相同的先前代码 第二次编辑 这是最可怕的解决方案,但它有效;)

    【讨论】:

    • 好的,我现在遇到问题了,你能提出解决方案吗?
    • @AnkushMadankar 我的回答允许你解析AM/PMtimespans
    • @AnkushMadankar 见编辑
    • 其他解决方案要好得多。如果缺少 AM/PM,不仅容易出现此错误,而且如果您只是剪掉最后一部分,您实际上会得到不正确的时间
    • 是的@Patrick 实际上我编辑了几次 ;) 我的想法只是摆脱 AM/PM 部分,不管怎么做,我认为这没关系,但我将再次编辑它;)...等待
    猜你喜欢
    • 1970-01-01
    • 2021-05-26
    • 2015-10-13
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多