2009-03-06 22 views
0

Tarihlerle çalışırken sorun yaşıyorum. "Dd-MM-yyyy" biçimine sahip bir DateTime örneğim olması gerekiyor. Bildiğim "dd-MM-yyyy" de benim tarih örneğimin bir dizgisi olmasını istemiyorum.Tarih Kültür Biçimi Sorunları

Ben Varlık çerçevesi yoluyla tarihim obj tohuma gerek

, hep Tarih yerine bir Varchar almak benim saklı yordam değiştirebilir

bir param bir tarihi alan bir saklı yordam ... çağrıları ama ben tip güvenliği istiyorum.

Aşağıdaki kod sorunu anlamak için yardımcı olabilir:

Dim s1 As String = CurrentUICulture.ToString() 'pt-PT 
Dim s2 As String = CurrentCulture.ToString()'pt-PT 
Dim odate As Date = DateTime.ParseExact(sdate, CurrentUICulture.DateTimeFormat.ShortDatePattern, CurrentUICulture) 'sdate = 19/03/2009 
'CurrentUICulture = pt-PT - ShortDatePattern = "dd-MM-yyyy" 
'odate is 03/19/2009 !!! 

Convert.ToDateTime(sdate, CurrentUICulture) 
'its the same! 

YARDIM!

+0

kodunuzu girinti, nedenle daha kolay okunmasını lütfen ... –

cevap

0

Sorun ... ilk etapta hiçbir sorun yoktu, çünkü ! sdate SQL saklı yordam ulaştığı zaman bir geçersiz tarih vardı hiçbir şey (veya null) ise

şey ... Bu

GetFormatedDate(ByVal sdate As String) As Date 

ve benzeri bir şeydir bir işlev kullanıyordu edilir. Hiçbir şey yok

ValueTypes bir değere sahip ... ama bunu yapmak mümkündür: Artık geçersiz param istisna olsun bununla

GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date) 

.

evet!

1

DateTimes bir biçime sahip değil. DateTime bir değer türü olduğundan, ikisi de örnekleri değildir.

Görünüşe göre, DateTime 'yanlış biçimlendirilmiş' (03/19/2009 tarihli olduğunu iddia ediyorsunuz). Odate'nin değerini nasıl kontrol ettin? Odate.ToString() olarak yazdırmak veya bir hata ayıklayıcı penceresinde değerini kontrol ederek mi? ile çıktısını deneyin:

Debug.Print odate.ToString(_ 
    Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _ 
    Globalization.CultureInfo.CurrentUICulture) 

Odate sadece DateTime - bu (şu anda hatırlamak rahatsız olamaz hangisinin) uzun zaman önce bazı tarihten itibaren saniye sayısını içerir. Biçimlendirme bilgisi yoktur ve bu nedenle çıktıda biçimlendirilecektir.

Tarihin 03/19/2009 olduğu gerçeği, ayrıştırmanızın başarılı olduğu anlamına gelir. 03/19/2009, Mart 2009'un sadece 19'udur (19. ayın 3'ü geçerli bir tarih değildir). Endişelenmeyi bırakın ve devam edin ;-)

+0

I Know ... sanmıyorum! "Bu (eğer DateTime 'hatalı biçimlendirilmiş' olduğunu düşünüyorum Bana öyle geliyor" ben teslim hata ayıklama modu Bu arada: "DateTime Oluşturucu (Int32, Int32, Int32, Int32, Int32, Int32, Takvim) Belirtilen yıl, ay, gün, saat, dakika DateTime yapısının yeni bir örneğini – Txugo

+0

başlatır ve Belirtilen takvim için ikinci. "Örnek! Ve biçimlendirme bilgisi var. Ve ihtiyacım var, bu yüzden sql srv'den geri taşma özel durumum yok. Yani, zeki zihniniz, ne cevap vermeyi ne de soruyu bile anlıyorsa. ... yazacak bir botter yok. – Txugo

0

Tarihler ve SQL Server ile uğraşırken (burada olduğunuzu farz ediyorum), ISO-8601 formatını kullanmanızı tavsiye ederim - diliniz ve kültürünüz ne olursa olsun çalışmalı veya diğer ayarlar.

ISO-8601, tarih biçimini şöyle tanımlar: YYYY-AA-GG (tire ile veya çizgi olmadan; YYYYMMDD de kabul edilebilir).

Bu işe yarar mı? 6 Mart bir tarih için

Dim oDate as Date = DateTime.Parse("2009-03-06") 

, 2009.

Ayrıca bakınız: http://www.w3.org/TR/NOTE-datetime

ve: çözüldü http://www.cl.cam.ac.uk/~mgk25/iso-time.html