具有月份名称和AM / PM的DateTime字符串转换

时间:2016-09-22 17:24:28

标签: c# .net datetime

我已经查看了一些关于将字符串解析为DateTime对象的问题,但似乎没有一个与我的格式相同。我需要解析为DateTime对象的字符串采用以下格式:

  

2016年6月29日下午12:57
  1月1日1900 12:00 AM

我正在尝试的格式如下:

DateTime.ParseExact(date, "MMM dd yyyy hh:mmtt", CultureInfo.InvariantCulture)

但是这会抛出FormatException。有什么建议吗?

4 个答案:

答案 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