Probleme mit der Konvertierung meiner DateTime in UTC

Ich speichere alle meine Daten im UTC-Format in meiner Datenbank. Ich frage den Benutzer nach seiner Zeitzone und ich möchte seine Zeitzone verwenden, und ich schätze, es ist die Serverzeit, um die UTC für sie herauszufinden.

Sobald ich das habe, möchte ich eine Suche durchführen, um den Bereich in der Datenbank anhand des neu konvertierten UTC-Datums festzustellen.

aber ich bekomme immer diese ausnahme.

System.ArgumentException was unhandled by user code  
Message="The conversion could not be completed because the   
supplied DateTime did not have the Kind property set correctly.  
For example, when the Kind property is DateTimeKind.Local,   
the source time zone must be TimeZoneInfo.Local.  
Parameter name: sourceTimeZone"

Ich weiß nicht, warum ich das bekomme.

Ich habe zwei Möglichkeiten versucht

 TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(id);
 // I also tried DateTime.UtcNow
 DateTime now = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); 
 var utc = TimeZoneInfo.ConvertTimeToUtc(now , zone );

Das ist fehlgeschlagen, also bin ich müde

 DateTime now = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local); 
 var utc = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(now, 
                                           ZoneId, TimeZoneInfo.Utc.Id);

Dies schlug auch beide mit dem gleichen Fehler fehl. Was mache ich falsch?

Bearbeiten würde das funktionieren?

 DateTime localServerTime = DateTime.SpecifyKind(DateTime.Now, DateTimeKind.Local);
 TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(id);

 var usersTime = TimeZoneInfo.ConvertTime(localServerTime, info);

 var utc = TimeZoneInfo.ConvertTimeToUtc(usersTime, userInfo);

Bearbeiten Sie 2 @ Jon Skeet

Ja, ich habe gerade darüber nachgedacht, dass ich vielleicht nicht einmal all das tun muss. Das Zeitzeug verwirrt mich jetzt, weshalb der Beitrag möglicherweise nicht so klar ist, wie er sein sollte. Ich weiß nie, was zum Teufel DateTime.Now ist (Ich habe versucht, meine Zeitzone in eine andere Zeitzone zu ändern, und es wird immer meine Ortszeit angezeigt).

Das wollte ich mit meinen Sachen machen. Der Benutzer kommt zur Site und fügt eine Warnung hinzu, und er wird jetzt als utc gespeichert (bevor DateTime war. Jetzt schlug jemand vor, alles UTC zu speichern).

Bevor also ein Benutzer zu meiner Website kam und abhängig davon, wo sich mein Hosting-Server befand, könnte es so sein, wie am nächsten Tag. Wenn also die Warnung am 30. August (ihre Zeit) angezeigt werden soll, aber mit der Zeitverschiebung des Servers könnten sie am 29. August erscheinen und die Warnung würde angezeigt.

Also wollte ich das bekämpfen. Nun bin ich mir nicht sicher, ob ich nur die Ortszeit speichern und dann dieses Offset-Material verwenden sollte. Oder einfach UTC-Zeit speichern. Das Speichern der UTC-Zeit ist möglicherweise immer noch falsch, da der Benutzer wahrscheinlich immer noch in Ortszeit denken würde, und ich bin mir nicht sicher, wie UTC wirklich funktioniert.

Edit3

 var info = TimeZoneInfo.FindSystemTimeZoneById(id)

 DateTimeOffset usersTime = TimeZoneInfo.ConvertTime(DataBaseUTCDate,
                                             TimeZoneInfo.Utc, info);
Die DateTime-Struktur unterstützt nur zwei Zeitzonen:

> Die lokale Zeitzone, in der die Maschine läuft.
> und UTC.

Schauen Sie sich die DateTimeOffset-Struktur an.

var info = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");

DateTimeOffset localServerTime = DateTimeOffset.Now;

DateTimeOffset usersTime = TimeZoneInfo.ConvertTime(localServerTime, info);

DateTimeOffset utc = localServerTime.ToUniversalTime();

Console.WriteLine("Local Time:  {0}", localServerTime);
Console.WriteLine("User's Time: {0}", usersTime);
Console.WriteLine("UTC:         {0}", utc);

Ausgabe:

Local Time:  30.08.2009 20:48:17 +02:00
User's Time: 31.08.2009 03:48:17 +09:00
UTC:         30.08.2009 18:48:17 +00:00
Ursprüngliche URL:https://stackoverflow.com/questions/1354516/having-problems-with-converting-my-datetime-to-utc

Zitieren Sie bitte die URL dieses Artikels: Probleme mit der Konvertierung meiner DateTime in UTC