Benutzer Datetime-Einstellung als GMT, wie Datum, um ihre lokalen Einstellung zu konvertieren?

StackOverflow https://stackoverflow.com/questions/1637144

  •  06-07-2019
  •  | 
  •  

Frage

In meiner Benutzer Einstellung Ich habe einen Drop-Down mit all GMT Terminen für die Benutzer zu wählen.

In c #, wie würde ich eine Datetime konvertieren in der Datenbank, um ihre GMT-Zeit gespeichert?

Die Zeit, in der Datenbank gespeichert ist der Server Zeit.

War es hilfreich?

Lösung

Für .NET 3.5 und höher, können Sie die Systemzeitzone Kennung mit dem Benutzer speichern (Sie diejenigen aus TimeZoneInfo.GetSystemTimeZones bekommen) und verwenden TimeZoneInfo zwischen den Zeitzonen zu konvertieren:

// In a User class that has a string timeZoneId field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
    DateTime utcDate      = TimeZoneInfo.Local.ConvertToUtc(originalDate);
    TimeZone userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(this.timeZoneId);
    return   TimeZone.ConvertTime(utcDate, userTimeZone);
}

In .NET 2.0, sind Sie auf die ältere TimeZone Klasse beschränkt, die für das lokale System nur zur Verfügung steht. Sie werden nicht automatisch die Sommer Informationen für den Benutzer erhalten, so dass Sie das selbst speichern müßten neben der Grund GMT / UTC-Offset.

// In a User class that has a double utcOffset field (for example)
public DateTime GetLocalDateTime(DateTime originalDate) {
    DateTime utcDate = TimeZone.CurrentTimeZone.ToUniversalTime(originalDate);
    return utcDate.AddHours(this.utcOffset);
}

// Usage
DateTime localDate = user.GetLocalDateTime(DateTime.Now);

Andere Tipps

Ich nehme an, Sie die GMT-Differenz für jeden Benutzer sind speichern? D. h 0 oder +1 oder -6, etc?

// Get your DateTime to convert
DateTime databaseDateTime = DateTime.Now;
double userGmtOffset = 1;

// Get the GMT time of the database time
int hoursOffset = TimeZone.CurrentTimeZone.GetUtcOffset(databaseDateTime).Hours;
DateTime gmtDateTime = databaseDateTime.AddHours((double)(0 - hoursOffset));
DateTime userDateTime = gmtDateTime.AddHours(userGmtOffset);

Verwenden System.DateTimeOffset statt Datetime. Es beinhaltet alle Funktionen, die Sie benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top