« TechEd Video #4 - It's all about Communi... | Main | Converting from a String Representation ... »

We recently needed to parse this evil. 

string poop = "2005-12-14T14:35:32.1700000-07:00";
DateTime poo = DateTime.ParseExact(poop,"yyyy-MM-ddTHH:mm:ss.fffffffzzz", System.Globalization.CultureInfo.InvariantCulture);

Important Notes:

  • HH means 24 hour time, hh means 12 hour time.
    • Don't do all your testing in the morning of a one digit month on a one digit day. 11:59pm on New Years Eve is an important test case.
    • If I'd have tested with 01:01:01 then using lower case h's would have worked, but would have broken this afternoon.
  • zzz means TimeZone offset like -07:00
  • When doing a ParseExact and then round-tripping with a ToString using the same format string will NOT result in the same string.
    • That means that:
      DateTime foo = DateTime.ParseExact(poo,"yyyy-MM-ddTHH:mm:ss.fffffffzzz", System.Globalization.CultureInfo.InvariantCulture);
      foo.ToString("yyyy-MM-ddTHH:mm:ss.fffffffzzz") == "2005-12-14T13:35:32.1700000-08:00"
      However, the semantics of the DateTime is the same.
  • fffffff means 7 digits of fractional seconds
  • T (in this context) has no specific meaning (it’s not reserved) so it is treated as a literal.
  • System.Globalization.CultureInfo.InvariantCulture is almost always necessary when you’re working in a non-UI context.
    • Don't get screwed when your application doesn't work when installed on an international version of Windows. 

 

 



Friday, April 15, 2005 5:19:53 PM (Pacific Standard Time, UTC-08:00)
I solve this problem by imagining a world with only one culture.

Incidentally, this is how our President also solves many problems..
Friday, April 15, 2005 9:45:00 PM (Pacific Standard Time, UTC-08:00)
Scott, I just got back from a rare night out with my wife. We decided to wine and dine in opulence, and afterwards enjoy a rich cultural spectacle. So essentially I took her to the happy hour at Stanfords and catch the Amityville Horror. Since when did you have time to take the lead role in a B-rate horror flick? The whole time I was watching the movie it was like some bizarre "TechEd Terror", seeing you struggle against the demons in the house. Seriously, this guy has to be your long-lost brother:

http://movies.go.com/moviesdynamic/movies/movie?name=amityvillhorror_2004&genre=horror&studio=TBA
Saturday, April 23, 2005 12:19:00 PM (Pacific Standard Time, UTC-08:00)
Been there :) My NUnit presentations generally show testing date parsing as a no-brainer use of automated testing after thinking about the test cases. As you clearly show it is all too easy to miss a subtlety in ad-hoc testing. In demos I change MM to mm and watch NUnit find the otherwise hard to find defect. HH vs hh is an even better example.

InvariantCulture is a good tip, thanks.
Monday, April 25, 2005 9:58:03 AM (Pacific Standard Time, UTC-08:00)
Why not:

DateTime foo = XmlConvert.ToDateTime(poop);
Monday, April 25, 2005 10:03:49 AM (Pacific Standard Time, UTC-08:00)
Gerard, valid point. I guess I wasn't too clear in my post.

* This problem needed to be solved (for me) in the context of a ParseExact call. Meaning, the code was generated like:
DateTime.ParseExact(poop,???, System.Globalization.CultureInfo.InvariantCulture)
where the ??? was to come from elsewhere. Since EVERY kind of date format could be passed in, I couldn't make XmlConvert (a very specific kind of translation) the else case.

That said, XmlConvert does work for this one of kind of date string.

Thanks!
Comments are closed.

Contact

Sponsors

Hosting By

Hot Topics

Tags

Calendar

<November 2009>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

Archives

November, 2009 (5)
October, 2009 (19)
September, 2009 (11)
August, 2009 (12)
July, 2009 (21)
June, 2009 (26)
May, 2009 (16)
April, 2009 (13)
March, 2009 (17)
February, 2009 (17)
January, 2009 (18)
December, 2008 (32)
November, 2008 (17)
October, 2008 (22)
September, 2008 (16)
August, 2008 (14)
July, 2008 (25)
June, 2008 (19)
May, 2008 (17)
April, 2008 (17)
March, 2008 (26)
February, 2008 (21)
January, 2008 (28)
December, 2007 (19)
November, 2007 (17)
October, 2007 (31)
September, 2007 (39)
August, 2007 (37)
July, 2007 (43)
June, 2007 (37)
May, 2007 (32)
April, 2007 (38)
March, 2007 (29)
February, 2007 (46)
January, 2007 (31)
December, 2006 (27)
November, 2006 (31)
October, 2006 (32)
September, 2006 (39)
August, 2006 (34)
July, 2006 (40)
June, 2006 (18)
May, 2006 (31)
April, 2006 (34)
March, 2006 (30)
February, 2006 (38)
January, 2006 (44)
December, 2005 (19)
November, 2005 (34)
October, 2005 (24)
September, 2005 (37)
August, 2005 (20)
July, 2005 (24)
June, 2005 (33)
May, 2005 (16)
April, 2005 (22)
March, 2005 (34)
February, 2005 (15)
January, 2005 (37)
December, 2004 (28)
November, 2004 (30)
October, 2004 (34)
September, 2004 (22)
August, 2004 (34)
July, 2004 (18)
June, 2004 (64)
May, 2004 (49)
April, 2004 (21)
March, 2004 (29)
February, 2004 (29)
January, 2004 (36)
December, 2003 (25)
November, 2003 (24)
October, 2003 (59)
September, 2003 (42)
August, 2003 (24)
July, 2003 (44)
June, 2003 (29)
May, 2003 (21)
April, 2003 (30)
March, 2003 (27)
February, 2003 (47)
January, 2003 (50)
December, 2002 (31)
November, 2002 (38)
October, 2002 (44)
September, 2002 (15)
May, 2002 (2)
April, 2002 (4)

Google Ads