0

My string representation of date time is "20181230183000000" and I am unable to convert it to DateTime:

DateTimeOffset.ParseExact(DOCDate, "dd.MM.yyyy HH:mm:ss.fff z", CultureInfo.InvariantCulture
Dmitry Bychenko
  • 180,369
  • 20
  • 160
  • 215
Sp007
  • 59
  • 1
  • 1
  • 10

2 Answers2

4

Well, actual format and pattern should match: your current input

 20181230183000000

means

 yyyyMMddHHmmssfff

which stands for year, month, day, hours, minutes, seconds, fractions of second all with leading zeroes and without any separators

Code:

  string DOCDate = "20181230183000000";

  DateTimeOffset result = DateTimeOffset.ParseExact(
    DOCDate, 
    "yyyyMMddHHmmssfff", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal); // Since you've mentioned 'z' in the question

Let's have a look

 Console.Write(result.ToString(CultureInfo.InvariantCulture));

Outcome:

  12/30/2018 18:30:00 +00:00

Similar code for DateTime:

  DateTime result = DateTime.ParseExact(
    DOCDate, 
    "yyyyMMddHHmmssfff", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AssumeUniversal); // Since you've mentioned 'z' in the question

Finally, if you want to represent DateTimeOffset (DateTime) in some format, use ToString() method:

  Console.Write(result.ToString("dd.MM.yyyy HH:mm:ss.fff' z'"));
Dmitry Bychenko
  • 180,369
  • 20
  • 160
  • 215
1

You can try:

var dateTimeString = "20181230183000000";
DateTimeOffset dto;
if (DateTimeOffset.TryParseExact(dateTimeString, "yyyyMMddHHmmssfff", 
                                 CultureInfo.InvariantCulture, 
                                 DateTimeStyles.AssumeUniversal |
                                 DateTimeStyles.AdjustToUniversal, out dto))

{
     Console.WriteLine(dto);
}

Here is a good post on using DateTimeOffset, DateTime and not TimeZoneInfo

DateTime.Parse("2012-09-30T23:00:00.0000000Z") always converts to DateTimeKind.Local

Gauravsa
  • 6,330
  • 2
  • 21
  • 30