将字符串转换为有效的日期时间格式

Converting a String into a Valid DateTime Format

我有两个时间戳,保存到两个 XML 文件并从中读取。
目前我正在使用 WCF Service 方法从 xml 文件中读取时间戳,因此它们以 Strings 的形式出现,但我需要将它们转换为 DateTime 以便它们可以比较。

明显的 Convert.ToDateTime(TimeStampString) 在运行时呈现此错误 -

String was not recognized as a valid DateTime

一样
DateTime.ParseExact(TimeStampString, "mm/dd/yyyy hh:MM:ss", CultureInfo.InvariantCulture);

两个时间戳的格式均符合 DateTime (mm/dd/yyyy hh:MM:ss)。

我什至尝试将时间戳字符串拆分为 String[] 并手动组装我自己的 DateTime 对象,但我仍然收到错误。

这是格式问题吗?
如何使我的字符串成为有效的日期时间?

格式问题

mm/dd/yy hh:MM:ss

应该是

MM/dd/yyyy hh:mm:ss

(基本上,交换日期中的大写MM和时间中的小写mm

您需要使用

DateTime.ParseExact(TimeStampString, "MM/dd/yyyy hh:mm:ss", CultureInfo.InvariantCulture);

而不是

DateTime.ParseExact(TimeStampString, "mm/dd/yyyy hh:MM:ss", CultureInfo.InvariantCulture);

给你

var dtedatetime = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:sszzz");


DateTimeOffset dto;
bool bIsParsed = DateTimeOffset.TryParseExact(dtedatetime , "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz",
                                    System.Globalization.CultureInfo.InvariantCulture,
                                    DateTimeStyles.AdjustToUniversal, out dto);

    var result = dto.DateTime;

问题是小写mm,用于分钟,你需要MM大写MM,加上你的日期是在 24 小时格式中,小时部分需要大写 HH,因此您的格式应为:

MM/dd/yyyy HH:mm:ss

(考虑到您的原始代码中有 yyyy,基于您的

参见:Custom Date and Time Format Strings

我通过删除任何改变美国格式的尝试解决了这个问题,所以字符串以美国格式出现 - 然后使用 IFormatProvider 在转换时改变格式。

IFormatProvider localFormat = new System.Globalization.CultureInfo("fr-FR", true);
DateTime ContentLastUpdatedTime = DateTime.Parse(ContentLastUpdatedStamp, localFormat , System.Globalization.DateTimeStyles.AssumeLocal);
DateTime ContentLastGrabbedTime = DateTime.Parse(LastGrabbedTimeStamp, localFormat , System.Globalization.DateTimeStyles.AssumeLocal);