简体   繁体   中英

DateTime local and utc the same

I am sending from webbrowser this string "2019-01-25T00:00:00+01:00" I undestand this as: this is local time and in utc should be "2019-01-24T23:00:00"

but on the server :

myDate.Kind is local
myDate "2019-01-24T23:00:00"
myDate.ToLocalTime() is the same "2019-01-24T23:00:00"
myDate.ToUniversalTime() is the same "2019-01-24T23:00:00"

what I need is if I sent this string "2019-01-25T00:00:00+01:00" I need to know on the server that there is 1h difference between local and utc

and parsing this string is done automatically by dot net core api (DateTime is method parameter)

The DateTime Type does not have any concept of time zones: if you need this, use DateTimeOffset instead.

I suspect your server is in the UTC timezone, Since ToLocalTime and ToUniversalTime give the same result.

You can try AdjustToUniversal option, eg

  string source = "2019-01-25T00:00:00+01:00";

  DateTime myDate = DateTime.ParseExact(
    source, 
   "yyyy-MM-dd'T'HH:mm:sszzz", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.AdjustToUniversal);

  Console.Write(string.Join(Environment.NewLine,
    $"Value = {myDate:HH:mm:ss}",
    $"Kind  = {myDate.Kind}"));

Outcome:

  Value = 23:00:00 
  Kind  = Utc

Edit: If you can't change server's code and thus you have to provide a string ( source ) such that DateTime.Parse(source) will return a correct date you can try to convert existing time-zone ( +01:00 ) into Zulu :

  string source = "2019-01-25T00:00:00+01:00";

  // 2019-01-24T23:00:00Z
  source = DateTime
    .ParseExact(source,
               "yyyy-MM-dd'T'HH:mm:sszzz",
                CultureInfo.InvariantCulture,
                DateTimeStyles.AdjustToUniversal)
    .ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'");

Then on the server you'll have

 // source is treated as UTC-time;
 // However, by default (when no options provided) myDate will have Kind = Local
 DateTime myDate = DateTime.Parse(source);

 Console.Write(string.Join(Environment.NewLine,
   $"Value = {myDate:HH:mm:ss}",
   $"Kind  = {myDate.Kind}"));

Outcome:

 Value = 02:00:00 // May vary; adjusted to server's time zone (In my case MSK: +03:00)
 Kind  = Local    // DateTime.Parse returns Local when no options specified

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM