我正在尝试将两个单独的字段(日期和时间)解析为一个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”异常。
我是否需要在字符串中插入一些斜杠和标点符号以使其正确读取?我想避免这种情况,因为我听说过在拆卸和重新组装琴弦时会遇到性能问题,但是除非有更好的解决方案,否则我可能必须这样做。
答案 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”不匹配时,会出现此错误