Bir zaman dilimi ofsetinin (dakikalar içinde) olduğu ve saat dilimini belirlemek için gereken bir senaryo var. Tüm verilerin mevcut olmadığını biliyorum (örneğin, -240 dakikalık bir kayma ile birkaç zaman dilimi olabilir), ancak "en iyi tahmin" kabul edilebilir.Saat dilimini UTC ofseti ile nasıl belirleyebilirim?
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
if (info.BaseUtcOffset.TotalMinutes == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
Bu sorta çalışır, ancak ben biraz beni atma Gün ışığından yararlanma hesap gerekir:
İlk geçiş bu benziyordu. Gün ışığından yürürlükte değildir ve DST sırasında yaklaşık% 70 doğru olduğumda kullanıcıya onlar için doğru zamanı gösterebilir Bunun anlamı içinde "yeterince iyi" çalışır
foreach (var info in TimeZoneInfo.GetSystemTimeZones())
{
var extra = info.IsDaylightSavingTime(DateTime.Now) ? 60 : 0;
if (info.BaseUtcOffset.TotalMinutes + extra == timezoneOffset)
{
// do something here if this is a valid timezone
}
}
: Ben bu korkunç kesmek ekledi. Hala ... bu benim gözbebeklerimin korkunç bir kodu.
Bunu yapmanın daha iyi bir yolu var mı? Daha fazla zerafet iyi olurdu ve daha fazla doğruluk daha iyi olurdu.
Güncelleme
Teknik olarak ben JavaScript tarihi konusundaki alabilirsiniz herhangi bir bilgi erişimi vardır. "Ofset" adlı gizli bir alan yerleştirdiğim bir sayfam var. Ofset alanını DateTime(). GetTimezoneOffset() ile dolduran bir JQuery işlevi var. Ben yardımcı olacak DateTime nesnesinde bir şey görmemekle birlikte, belki bu fikirler için başka yollar açacaktır.
@Sailing Judo: Cevabım için bir kod ekledim, bu da Javascript'in evrensel bir zaman damgasını yerel bir tanıma dönüştürmesine izin veriyor. – Kip