【问题标题】:Parse C# string to DateTime将 C# 字符串解析为 DateTime
【发布时间】:2011-11-26 16:55:34
【问题描述】:

我有一个这样的字符串: 250920111414

我想从该字符串创建一个 DateTime 对象。截至目前,我使用子字符串并这样做:

string date = 250920111414;

int year = Convert.ToInt32(date.Substring(4, 4));
int month = Convert.ToInt32(date.Substring(2, 2));
...
DateTime dt = new DateTime(year, month, day ...);

是否可以使用字符串格式,做同样的事情,没有子字符串?

【问题讨论】:

  • 即使是这样,我也不认为你会得到任何东西——这看起来是一种完全合理且可读的方法。
  • @JeremyMcGee 我觉得它实际上不那么可读,我更喜欢 Jons 的方法
  • 这对我来说是可读的,但项目中有几个人。

标签: c# .net string datetime format


【解决方案1】:

当然。从你的字符串猜测格式,你可以使用ParseExact

string format = "ddMMyyyyHHmm";

DateTime dt = DateTime.ParseExact(value, format, CultureInfo.InvariantCulture);

TryParseExact:

DateTime dt;
bool success = DateTime.TryParseExact(value, format, 
                     CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);

后一个调用将在解析失败时简单地返回 false,而不是抛出异常 - 如果您可能有不应该导致整个任务失败的错误数据(例如,它是用户输入,而您只是想提示他们)那么这是一个更好的调用。

编辑:有关格式字符串详细信息的更多详细信息,请参阅 MSDN 中的 "Custom Date and Time Format Strings"

【讨论】:

  • 你真的记得所有这些简单但有用的解决方案,或者你手边有一本大大的字典吗? :)
  • @Praetor12:对于像 DateTime.ParseExact 这样的基础知识,我记得方法名称,但有时会弄错参数 - 就像我第一次在这里做的那样:)
  • Jon Skeet 简直太棒了!有时我也想拥有一个 +1000 按钮。
  • @Jon Skeet 我告诉的不是方法名称,而是格式字符串。在 C# 中有很多“格式”。可能有他们的总清单。 msdn在不同的文章中只有稀疏的例子:(
  • 有时 stackoverflow 会给我那种温暖舒适的感觉。就像当我需要查找有关反转自定义 DateTime.ToString() 的信息时,我知道 Jon Skeet 会回答它。他做到了……
【解决方案2】:

你可以使用:

DateTime dt = DateTime.ParseExact(
                  date, 
                  "ddMMyyyyHHmm",
                  CultureInfo.InvariantCulture);

【讨论】:

    【解决方案3】:
    string iDate = "05/05/2005";
    DateTime oDate = Convert.ToDateTime(iDate);
    DateTime oDate = DateTime.ParseExact(iString, "yyyy-MM-dd HH:mm tt",null);
    
    
    

    DateTime Formats

    【讨论】:

      猜你喜欢
      • 2011-07-18
      • 2013-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-08-30
      • 2013-11-21
      • 2020-09-27
      • 1970-01-01
      相关资源
      最近更新 更多