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
  • 165,109
  • 17
  • 150
  • 199
Sp007
  • 59
  • 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
  • 165,109
  • 17
  • 150
  • 199
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
  • 5,847
  • 2
  • 16
  • 25