我已经查看了一些关于将字符串解析为DateTime对象的问题,但似乎没有一个与我的格式相同。我需要解析为DateTime对象的字符串采用以下格式:
2016年6月29日下午12:57
1月1日1900 12:00 AM
我正在尝试的格式如下:
DateTime.ParseExact(date, "MMM dd yyyy hh:mmtt", CultureInfo.InvariantCulture)
但是这会抛出FormatException。有什么建议吗?
答案 0 :(得分:2)
您可能希望查看MSDN上的Custom Date and Time Format Strings页面。我认为您的问题是您当前的格式要求您在当天和小时都使用前导零。例如,这看起来像
Jan 01 1900 01:00 PM
您可能想要使用格式
DateTime.ParseExact(date, "MMM d yyyy h:mmtt", CultureInfo.InvariantCulture)
不需要日期和小时位置的前导零。这将匹配诸如
之类的值1900年1月1日下午1:00
我希望这会有所帮助。
答案 1 :(得分:1)
有一个DateTime.ParseExact的重载,需要尝试一系列格式,并允许您指定允许的空格:
string[] ss = new string[] { "Jun 29 2016 6:59PM", "Jan 1 1900 12:00AM " };
string[] formats = new string[] { "MMM dd yyyy h:mmtt", "MMM d yyyy hh:mmtt", "MMM dd yyyy hh:mmtt", "MMM d yyyy h:mmtt" };
foreach (string s in ss)
{
Console.WriteLine(DateTime.ParseExact(s, formats, null, DateTimeStyles.AllowWhiteSpaces).ToString("yyyy-MM-dd HH:mm:ss"));
}
但是如果你的日期字符串有点松散,你可以使用TryParse
代替:
DateTime d;
foreach (string s in ss)
{
if (DateTime.TryParse(s, out d))
{
Console.WriteLine(d.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
您应该指定一个System.IFormatProvider。
答案 2 :(得分:0)
第一个字符串将被成功解析。
第二个字符串需要使用d
specifier而不是dd
specifier,因为单日数不具有前导零。
DateTime.ParseExact("Jun 29 2016 12:57PM",
"MMM dd yyyy hh:mmtt",
CultureInfo.InvariantCulture).Dump();
和
DateTime.ParseExact("Jan 1 1900 12:00AM ",
"MMM d yyyy hh:mmtt",
CultureInfo.InvariantCulture).Dump();
顺便说一下,你可以使用MMM d yyyy hh:mmtt
格式。
答案 3 :(得分:-1)
这是一个日期格式的备忘单,由http://www.mikesdotnetting.com/article/23/date-formatting-in-c提供
Example Usage
<%= String.Format("{specifier}", DateTime.Now) %>
@DateTime.Now.ToString("F")
@DateTime.Now.ToString("hh:mm:ss.fff")
Specifier
Description
Output
d Short Date 08/04/2007
D Long Date 08 April 2007
t Short Time 21:08
T Long Time 21:08:59
f Full date and time 08 April 2007 21:08
F Full date and time (long) 08 April 2007 21:08:59
g Default date and time 08/04/2007 21:08
G Default date and time (long) 08/04/2007 21:08:59
M Day / Month 08 April
r RFC1123 date Sun, 08 Apr 2007 21:08:59 GMT
s Sortable date/time 2007-04-08T21:08:59
u Universal time, local timezone 2007-04-08 21:08:59Z
Y Month / Year April 2007
dd Day 08
ddd Short Day Name Sun
dddd Full Day Name Sunday
hh 2 digit hour 09
HH 2 digit hour (24 hour) 21
mm 2 digit minute 08
MM Month 04
MMM Short Month name Apr
MMMM Month name April
ss seconds 59
fff milliseconds 120
FFF milliseconds without trailing zero 12
tt AM/PM PM
yy 2 digit year 07
yyyy 4 digit year 2007
: Hours, minutes, seconds separator, e.g. {0:hh:mm:ss} 09:08:59
/ Year, month , day separator, e.g. {0:dd/MM/yyyy} 08/04/2007
. milliseconds separator