74 lines
2.8 KiB
C#
74 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using gehGassi.Web.Models;
|
|
|
|
namespace gehGassi.Web.Helper
|
|
{
|
|
/// <summary>
|
|
/// Hilfsklasse für den Umgang mit Zeitzonen
|
|
/// </summary>
|
|
public static class TimeZoneHelper
|
|
{
|
|
/// <summary>
|
|
/// Gibt eine Liste aller Zeitzonen zurück
|
|
/// </summary>
|
|
/// <returns>Liste</returns>
|
|
public static List<TimeZoneVm> GetTimeZones()
|
|
{
|
|
var timeZones = new List<TimeZoneVm>();
|
|
|
|
foreach (var zone in TimeZoneInfo.GetSystemTimeZones())
|
|
{
|
|
timeZones.Add(new TimeZoneVm()
|
|
{
|
|
Id = zone.Id,
|
|
Name = zone.DisplayName
|
|
});
|
|
}
|
|
|
|
return timeZones;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Hilfsmethode die aus einem UTC-Offset als string die erste passende Zeitzone (Basis ohne Daylightsaving) auswählt
|
|
/// </summary>
|
|
/// <param name="offset">Offset</param>
|
|
/// <returns>Id der Zeitzone</returns>
|
|
public static string GetTimezoneIdByOffset(string offset)
|
|
{
|
|
offset = offset.Replace("+", "");
|
|
var timeSpan = TimeSpan.ParseExact(offset, "hh\\:mm", CultureInfo.InvariantCulture, TimeSpanStyles.None);
|
|
var firstOrDefault = TimeZoneInfo.GetSystemTimeZones().FirstOrDefault(c => c.BaseUtcOffset == timeSpan);
|
|
if (firstOrDefault != null)
|
|
return firstOrDefault.Id;
|
|
return "W. Europe Standard Time";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Konvertiert ein UTC-Date in ein Datum das der aktuellen Auswahl des Benutzers entspricht
|
|
/// </summary>
|
|
/// <param name="utcDate">Datum in UTC-Format welches in das aktuell lokale Datum übersetzt werden soll</param>
|
|
/// <param name="timeZoneId">Id der Zeitzone</param>
|
|
/// <returns>Datum in lokaled Datum konvertiert</returns>
|
|
public static DateTime ConvertToLocal(DateTime utcDate, string timeZoneId)
|
|
{
|
|
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
|
|
return TimeZoneInfo.ConvertTimeFromUtc(utcDate, timeZoneInfo);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Konvertiert ein Benutzer bezogenes lokales Datum basierend auf der aktuellen Auswahl des Benutzers in ein UTC Datum
|
|
/// </summary>
|
|
/// <param name="localDate">Datum welches in UTC konvertiert werden soll</param>
|
|
/// <param name="timeZoneId">Id der Zeitzone</param>
|
|
/// <returns>Datum in UTC Konvertiert</returns>
|
|
public static DateTime ConvertToUtc(DateTime localDate, string timeZoneId)
|
|
{
|
|
var timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
|
|
return TimeZoneInfo.ConvertTimeToUtc(localDate, timeZoneInfo);
|
|
}
|
|
}
|
|
}
|