将字符串转换为有效的日期时间格式
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
,基于您的 )
我通过删除任何改变美国格式的尝试解决了这个问题,所以字符串以美国格式出现 - 然后使用 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);
我有两个时间戳,保存到两个 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
,基于您的
我通过删除任何改变美国格式的尝试解决了这个问题,所以字符串以美国格式出现 - 然后使用 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);