2009-10-12 10 views
10

Eski bir veritabanından bazı tarihler ve saatler kullanmam gerekiyor. Dizeler olarak temsil edilirler. Tarihler dd/MM/yy. Zamanlar HH: mm.UK zamanları (hem BST hem de GMT) dizeleri UTC (C#) olarak dönüştürülüyor

Bunları veritabanından aldığım anda bunları UTC'ye dönüştürmek istiyorum. ABD sistemleri üzerinde çalışıyorum, bu yüzden ortak bir zamana ihtiyacım var.

Karşılaştığım sorun, bunları UTC DateTime değerlerine dönüştürmektir. Ayrıştırma yapabilirim, vb. Gerçek sorun, zaman dilimini ilgilendirir. tarih İngiltere Yaz Saati döneminde ise

DateTime ukTime = // Parse the strings in a DateTime value. 
TimeZoneInfo timeZoneInformation = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
DateTimeOffset utcTime = new DateTimeOffset(ukTime, timeZoneInformation.BaseUtcOffset); 

Ancak bu hatalı değerler verir:

Ben aşağıdaki yaklaşımı kullanmaya çalışıyorum.

"GMT Gün Işığı Saati" ni bu tarihlerde kullanabilirim, ancak geçişin ne zaman olduğunu bilmem gerekiyor. Eminim daha az zahmetli bir yol olmalı.

İngiltere saat ayarlarına sahip bir makine kullanmadığım için yerel saate dayanamıyorum. Ben mesajları dolaştılar ettik ama doğrudan bu ele bir şey bulamadı

// Works for both GMT (UTC+0) and BST (UTC+1) regardless of the regional settings of the system it runs on. 
DateTime ParseUkTimeAsUtcTime(string date, string time) 
{ 
    ... 
} 

:

Temelde, böyle bir şey lazım. Elbette bu da EST, EDT, vb. Bir sorun mu?

+0

Genel bir TimeInTimeZone-> TimeInUTC yöntemi olarak buna ihtiyacım var. –

cevap

5

TimeZoneInfo örneğinizde, "ayarlama kurallarını" dikkate alan GetUtcOffset() yöntemini kullanarak deneyin.

Bunu kullanmak, temel olarak orijinal örneğinizle aynı şekilde çalışır, ancak BaseUtcOffset özelliği yerine bu yöntemi kullanırsınız.

DateTime ukTime = // Parse the strings in a DateTime value. 
TimeZoneInfo timeZoneInformation = TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"); 
DateTimeOffset utcTime = new DateTimeOffset(ukTime, timeZoneInformation.GetUtcOffset(ukTime)); 
+0

Güzel, ama cahil için bir kod örneği gönderebilir misin? Bu kanonik bir kaynak olmalı. –

+0

Bence bu örnek yapmanız gereken şeyleri kapsamalıdır. Bunu basitleştirdiyseniz bana bildirin. – bdukes

+0

Buna ekleyeceğim tek şey, "utcTime.UtcDateTime" için başvurduğum gerçek bir DateTime nesnesi elde etmektir. –

0

ne dersiniz:

DateTime.Parse(dateTimeString).ToUniversalTime(); 

veritabanı sunucusu uygulama sunucusu olarak aynı saat diliminde kendi tarihsaat saklar varsayarsak.

İlgili konular