如何在C#中将日期和时间分别解析为DateTime?

时间:2018-07-30 15:09:19

标签: c# asp.net-mvc datetime

我正在尝试将两个单独的字段(日期和时间)解析为一个DateTime对象作为字符串。日期带有填充,时间没有填充,但是它们遵循一致的格式,日期类似于07302018,而时间则是101230;还有一个问题,就是时间可能是91230。我现在尝试过的内容:

string timeformat1 = "MMddyyyy HHmmss";
string timeformat2 = "MMddyyyy Hmmss";
string date = "07302018"
string time = "63020"


if (time.Length == 6)
   {
      datetimeobject = DateTime.ParseExact($"{date} {time}", timeformat1, CultureInfo.InvariantCulture);
   }
else
   {
      datetimeobject = DateTime.ParseExact($"{date} {time}", timeformat2, CultureInfo.InvariantCulture);
   }

似乎没有用,给出了“未将字符串识别为有效的DateTime”异常。

我是否需要在字符串中插入一些斜杠和标点符号以使其正确读取?我想避免这种情况,因为我听说过在拆卸和重新组装琴弦时会遇到性能问题,但是除非有更好的解决方案,否则我可能必须这样做。

2 个答案:

答案 0 :(得分:4)

尝试此操作以避免出现这种情况

string timeformat = "MMddyyyy HHmmss";

string date = "07302018";
string time = "91230";
string joint = $"{date} {time.PadLeft(6,'0')}";
DateTime datetimeobject = DateTime.ParseExact(joint, timeformat, System.Globalization.CultureInfo.InvariantCulture);

DateTime.ParseExact会因为一个小时的单个字符和一个H而失败,因为它需要将小时和其他值分开。来自MSDN

  

如果format是不包含日期或   时间分隔符(例如“ yyyyMMddHHmm”),请使用不变文化   提供程序参数和每种自定义格式的最广泛形式   说明符。例如,如果要以以下格式指定小时数   模式,请指定较宽的形式“ HH”,而不是较窄的形式,   “ H”。

答案 1 :(得分:-2)

我不知道这是否是您的问题,

但是我的时间是我何时使用datetime.toString()在文本框中显示时,其格式已按照系统的日期时间格式进行设置,但现在有所不同用户以不同的方式设置日期时间

,如果我修复了日期时间解析确切的字符串,则会出现类似

在下图

datetimeobject = DateTime.ParseExact(/*this part is formated as per system current datetime*/$"{date} {time}", /* never fix this string */ "yyyyMMdd HHmmss", CultureInfo.InvariantCulture);

过来我用了这个

datetimeobject = DateTime.ParseExact((datetime from textbox), /* here do not give static format instead use this */ CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern + " " + CultureInfo.CurrentCulture.DateTimeFormat.LongTimePattern, CultureInfo.InvariantCulture);

当$“ {date} {time}”格式与解析精确格式“ yyyyMMdd HHmmss”不匹配时,会出现此错误