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

时间:2015-04-17 15:00:07

标签: c# datetime datetime-format

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

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

  

字符串未被识别为有效的DateTime

同样

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

两个时间戳都采用DateTimemm/dd/yyyy hh:MM:ss)的正确格式。

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

这是格式问题吗?
如何使我的String成为有效的DateTime?

5 个答案:

答案 0 :(得分:3)

这是格式问题

mm/dd/yy hh:MM:ss

应该是

MM/dd/yyyy hh:mm:ss

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

答案 1 :(得分:1)

我通过删除任何改变美国格式的尝试解决了这个问题,因此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);

答案 2 :(得分:0)

您需要使用

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

而不是

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

答案 3 :(得分:0)

问题是小写mm用于分钟,您需要MM大写MM,此外您的日期是24小时格式,并且您需要小时部分的大写HH,因此您的格式应为:

MM/dd/yyyy HH:mm:ss

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

请参阅:Custom Date and Time Format Strings

答案 4 :(得分:-2)

你去吧

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;