【问题标题】:String which is not in datetime format to DateTime不是日期时间格式的字符串到 DateTime
【发布时间】:2016-08-28 02:37:32
【问题描述】:

我有一个不是日期时间格式的字符串,例如:20160503。我怎样才能将其更改为日期时间。我尝试使用子字符串。它正在工作。有没有更有效的方法?以下是我现在拥有的。

string a = "20160503";
int b = Convert.ToInt32(a.Substring(0, 4));
int c = Convert.ToInt32(a.Substring(4, 2));
int d = Convert.ToInt32(a.Substring(6, 2));
string date = b + "/" + c + "/" + d;
DateTime result = new DateTime();
DateTime.TryParse(date, out result);

【问题讨论】:

  • 鉴于今天是 2016 年 5 月 3 日,我想说您应该使用格式 YYYYMMdd 并使用 DateTime.ParseExact

标签: c# string datetime type-conversion


【解决方案1】:

既然您知道日期时间的准确 格式,您可以尝试使用ParseExact DateTime 的方法。

var dt = DateTime.ParseExact(a,"yyyyMMdd",CultureInfo.InvariantCulture);

欲了解更多信息,请查看here

【讨论】:

  • @Downvoter,您能否解释一下出了什么问题,以便纠正它。提前谢谢你。
  • YYYY 应该是 yyyy。此代码现在导致异常 String was not recognized as a valid DateTime
  • 出现错误:字符串未被识别为有效的日期时间。
  • 如果不是有效字符串怎么办?说20161312
  • 如果它无效,则它无效并且该方法将抛出。您可以以某种方式过滤掉无效字符串或将解析包装在 try/catch 中。
【解决方案2】:

试试这样的:

定义您自己要使用的解析格式字符串。

string formatString = "yyyyMMdd";
string sample = "20160503";
DateTime dt = DateTime.ParseExact(sample,formatString,null);

【讨论】:

    【解决方案3】:

    感谢您的回复。最后我最终使用了DateTime.TryParseExact

    string dateString = "20150503";
    DateTime dateValue = new DateTime();
    DateTime.TryParseExact(dateString, "yyyyMMdd", new CultureInfo("en-US"), DateTimeStyles.None, out dateValue);
    

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      • 2016-12-22
      相关资源
      最近更新 更多