2016-05-19 5 views
0

In meiner aktuellen Aufgabe, ich bin etwas Mismatch in Date-Time-Berechnung konfrontiert. Es ist wie die Verwaltung von Benutzerdaten. Der Benutzer hat Aktivierungsdatum (TT/MM/JJJJ) und Ablaufdatum (TT/MM/JJJJ). Von der Benutzeroberfläche werden die Datumsdetails gesammelt und in der SQL DB gespeichert. Beispiel: Wenn ein Benutzer XYZ heute (19. Mai 2016) erstellt hat, hat der Benutzer XYZ das Aktivierungsdatum als 19-05-2016 und das Ablaufdatum wird als 25-05-2016 festgelegt (basierend auf dem Wunsch des Benutzers).DateTime Fehler mit TimeZoneInfo.ConvertTimeToUtc()

Benutzername: XYZ

Aktivierungsdatum: 19-05-2016

Gültig bis: 25-05-2016

Also wenn man versucht, die Details in der Website anzuzeigen Die Benutzerdaten werden aus der SQL-Datenbank abgerufen, und die Datumszeit wird in die UTC-Zeitzone konvertiert. Anschließend werden Details zur Site für die Benutzeransicht übergeben. In DB ist das Datum so wie es ist, aber während es mit TimeZoneInfo.ConvertTimeToUtc() konvertiert wird, wird der Datumswert um 1 reduziert (wenn das Datum 19-05-2016 ist, wird es als 28-05-2016 konvertiert)

select username, activationdate, expirydate from UserDetails where username = 'XYZ' 

Ergebnis der Abfrage ist,

username | activationdate   | expirydate 
------------------------------------------------------------ 
XYZ  | 2016-05-19 00:00:00.000 | 2016-05-25 00:00:00.000 

nach UTC Umwandlung

ExpiryDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.expirydate); 
ActivationDate = TimeZoneInfo.ConvertTimeToUtc((DateTime)user.activationdate); 
// after execution of these statements 
// ExpiryDate = 2016-05-18 00:00:00.000 
// ActivationDate = 2016-05-24 00:00:00.000 

So nach ConvertTimeToUtc() die tatsächliche activationdate 2016.05.19 00: 00: 00.000 umgewandelt als 2016-05-18 00: 00: 0 0.000 ans das Ablaufdatum 2016-05-25 00: 00: 00.000 wird konvertiert als 2016-05-24 00: 00: 00.000. Ich habe einen Link verwiesen, der besagt, dass TimeZoneInfo.ConvertTimeToUtc() Convert the specified date and time to Coordinated Universal Time (UTC) ist. Ich habe auch versucht Online-Konvertierung von aktuellen Datum und Uhrzeit in UTC in google, konvertiert es die Zeit in UTC, aber ich sehe nicht so viel Unterschied im Datum. Meine Verwirrung ist, warum diese UTC-Konvertierung den Datumswert um ein vollständiges Datum reduziert? ODER wo ist das Ding falsch?

Jeder Vorschlag dazu wäre hilfreich.

+0

Sie speichern in UTC die Zeitzonenzeit des Benutzers. Wenn Sie die Zeit zurück auf den Client ziehen konvertieren zurück von UTC zu den Benutzern Zeitzone info? –

Antwort

1

Das Problem hier ist Ihre Speicherung des Datums als 2016-05-19 00: 00: 00.000.Try, um die genaue Zeit einschließlich Minuten Sekunden, die Zeitstempel vom Benutzer ist zu erhalten.Ich glaube, Sie sind von IST, wenn es Nacht ist 12'o Uhr bedeutet, dass sie hinter uns sind, deshalb sehen Sie das vorherige Datum. Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

+0

Mit der genauen Zeit auch, dass ein Tag Unterschied ist immer noch :( –

+0

Ich bin nicht vertraut in C#. Anstelle der Codierung in C# können Sie versuchen, in sql konvertieren SELECT CONVERT_TZ ("Spaltenname", @@ session.time_zone, '+00 : 00 ') und dann an C# binden – Mani

Verwandte Themen