日期时间字符串解析
我制作了一个用于解析 ascii 文件的通用解析器。 当我想解析日期时,我使用 DateTime 对象中的 ParseExact 函数来解析,但我遇到了年份问题。
要解析的文本是“090812”,parseExact 字符串为“yyMMdd”。
我希望得到一个 DateTime 对象,说“12/8-2009”,但我得到“12/8-1909”。 我知道,我可以通过事后解析它来做出一个丑陋的解决方案,从而修改年份..
有人知道解决这个问题的聪明方法吗?
提前致谢
..Søren
I have made a generic parser for parsing ascii files.
When I want to parse dates, I use ParseExact function in DateTime object to parse, but I get problems with the year.
The text to parse is i.e. "090812" with the parseExact string "yyMMdd".
I'm hoping to get a DateTime object saying "12/8-2009", but I get "12/8-1909".
I know, that I could make an ugly solution by parsing it afterwards, and thereby modifying the year..
Anyone know of a smart way to solve this ??
Thanks in advance..
Søren
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
理论上,执行此操作的优雅方法是:更改用于解析文本的
DateTimeFormatInfo
所使用的Calendar
的TwoDigitYearMax
属性。 例如:然后在调用
DateTime.ParseExact
时使用dtfi
。实用的方法:将“20”添加到输入的开头,并使用“yyyyMMdd”进行解析。
Theoretically elegant way of doing this: change the
TwoDigitYearMax
property of theCalendar
used by theDateTimeFormatInfo
you're using to parse the text. For instance:Then use
dtfi
in your call toDateTime.ParseExact
.Practical way of doing this: add "20" to the start of your input, and parse with "yyyyMMdd".
好吧,如果您确定所有源日期都是本世纪,那么您可以对带有“20”前缀的源字符串使用 parseExact。
Well, if you're definite that all your source dates are this century, then you could use parseExact against a "20"-prefixed source string.
您将需要确定某种适合您的数据的阈值日期。 如果解析的日期早于该日期,则添加 100 年。 一种安全的方法是在输入字符串中添加适当的世纪前缀。 在这个例子中,我选择了 1970 年作为截止时间:
Jon Skeet 还发布了一个使用
DateTimeFormatInfo
的很好的例子,我暂时忘记了:)You will need to determine some kind of threshold date appropriate for your data. If the parsed date is before this date, add 100 years. A safe way to do that is to prefix the input string with the appropriate century. In this example I've chosen 1970 as the cutoff:
Jon Skeet also posted a nice example using
DateTimeFormatInfo
that I had momentarily forgotten about :)