title: DateTime.ParseExact to NodaTime ZonedDateTime issue
body: <p>I'm having an issue converting a parsed <code>string</code> into a correct NodaTime <code>ZonedDateTime</code>. The below method takes a string (allegedly in UTC) pushed by the brokers server, and returns a <code>ZonedDateTime</code> with the <code>DateTimeZone</code> being set to UTC. The domain model will only accept <code>ZonedDateTime</code> objects so this is happening at the system boundary.</p>
  
  <p>For example, a <code>string</code> being passed as the argument being exactly '2017060623:20:10' would then return a <code>ZonedDateTime</code> like 2017-06-06T13-:20:10 (curiously a ten hour difference, my local time zone here in Sydney is +10 UTC).</p>
  
  <pre><code>public static ZonedDateTime GetZonedDateTimeUtcFromMarketDataString(string dateTime)
  {
      var dotNetDateTime = DateTime.ParseExact(
          dateTime,
          "yyyyMMddHH:mm:ss,                
          CultureInfo.InvariantCulture)
          .ToUniversalTime();
  
      return new ZonedDateTime(Instant.FromDateTimeUtc(dotNetDateTime), DateTimeZone.Utc);
  }
  </code></pre>
  
  <p>So I changed the method to the below, which works, but I'm sure there's a better way. I'm certain my error is that I'm somehow involving my local time zone, rather than keeping everything in UTC.</p>
  
  <pre><code>public static ZonedDateTime GetZonedDateTimeUtcFromMarketDataString(string dateTime)
  {
      var parsedDateTime = DateTime.ParseExact(
          dateTime,
          "yyyyMMddHH:mm:ss",
          CultureInfo.InvariantCulture);
  
      var dotNetDateTime = new DateTime(
          parsedDateTime.Year,
          parsedDateTime.Month,
          parsedDateTime.Day,
          parsedDateTime.Hour,
          parsedDateTime.Minute,
          parsedDateTime.Second,
          DateTimeKind.Utc);
  
      return new ZonedDateTime(Instant.FromDateTimeUtc(dotNetDateTime), DateTimeZone.Utc);
  }
  </code></pre>