移除 DateTime.ParseExact 的时区信息

3
我想将一个字符串解析为datetime,其格式如下:
[星期],[日期] [月份] [年份] [时间][上午/下午] [时区](例如:
"Thursday, 1 Dec 2011 08:30pm EST")
我使用DateTime.ParseExact函数和格式("dddd, dd MMM yyyy hh:mmtt")来完成此操作。然而,时区给了我一个问题。没有代码可以读取以那种方式编写的时区。我不关心时区,所以我要么删除它,要么读取它——只要parsexact可以工作即可。
一种去除它的方法是从字符串中实际删除它(使用.Replace)——但是我不知道源会产生多少不同的时区,而且我认为一长串替换看起来很难看,容易出错。
那么,有没有一种方法可以将其删除或读取它(然后我可以忽略它)?

1
如果时区始终存在,您可以在最后一个空格处截断字符串,并解析其余部分。 - Sergey Kalinichenko
@dasblinkenlight 嗯,这是一个非常好的想法。如果有更简洁的方法,我会更喜欢那个,但这是一个不错的解决方案。 - Aabela
http://www.timeanddate.com/library/abbreviations/timezones/ - Hans Passant
@dasblinkenlight - 我最终选择了你的解决方案。如果你能重新发布一下作为答案,我将会标记它为被接受的答案。 - Aabela
如果你有一个有限数量的可能时区,那么你可以使用“string[] formats”重载。这样它将保持由于时区而导致的任何可能的日期更改。 - BlueChippy
显示剩余2条评论
1个回答

0
你可以扫描字符串中的空格,并在第五个空格之后截取所有内容。如果只有四个空格,则保留整个字符串(这意味着没有时区)。 < p > < em > 在Jon的评论后,此答案已被编辑。


最好在第五个空格处切割,而不是在最后一个空格处。你永远不知道时区名称何时可能会获得包含空格的可读组件。 - Jon
@Jon 你说得对,感谢你的绝佳建议:在第五个空格处切割(如果存在)即使时区不存在也能起作用! - Sergey Kalinichenko
我使用了"LastIndexOf(' ')"代替。鉴于ParseExact非常敏感,如果有任何变化,它无论如何都会出错。 - Aabela
@Aabela:在.NET 4中,这可以非常简单,只需使用String.Join(" ", "Thursday, 1 Dec 2011 08:30pm EST".Split(' ').Take(5))即可。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接