2012-05-17 29 views
6

Bir C# WinForms uygulaması oluşturdum.DateTime garip davranışı

benim bilgisayarda

aşağıdaki çalışır:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

ama bu değil: müvekkilimin bilgisayarlarda

DateTime.Parse("13/05/2012") 

o ters oluyor.

DateTime.Parse("13/05/2012") 

ama bu değil: Bu işler

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

hata durumları: Bu sorun hakkında internette herhangi bir bilgi bulmak için yönetmek vermedi

String was not recognized as a valid DateTime. 

. Program .Net Framework 4'ü kullanır ve bir x86 uygulamasıdır. Windows 8 x64 çalıştırıyorum, istemci Windows 7 x64 çalıştırıyor.

Bunun neden oluştuğuna dair bir ipucu var mı?

Teşekkürler.

+2

Ben sistemler Cultureınfo tarih-saat biçimi ile ilgilidir bir tutarsızlık şüpheli ama aracı 'çalışmıyor' neyi lütfen ortaya ediyorum. Bir hata mı yaratıyor? Hata mesajı nedir? –

+1

@DanJ Onun için çalışıyor, ancak 'ParseExact' yöntemini kullanırken, istemcinin bilgisayarında "05/13/2012" olarak ayrıştırır. CultureInfo'ya bakmaya katılıyorum. – SimpleVar

+4

ISO 'yyyy-MM-dd' biçiminde standartlaştırmanın bir başka nedeni. =) – MCattle

cevap

12

Farklı bilgisayarlarda farklı davranışlar elde etmenizin nedeni, farklı kültürlerle çalıştığı içindir. (ideone)

System.Console.WriteLine(CultureInfo.CurrentCulture); 

Çıktı (örnek):

biri tarih ayırıcı kültür birçok şeyi belirler

 
en-US 
olduğu farklı bir yanıt versin olmadığını görmek için iki bilgisayarda kod satırı çalıştırmayı deneyin . (ideone)

CultureInfo cultureInfo = CultureInfo.InvariantCulture; // or whatever you prefer 
DateTime dateTime = DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", cultureInfo); 

Yukarıdaki kod bu ifadeleri kullanarak sahip olduğu varsayılır: tüm kullanıcılar için tutarlı bir davranış istiyorsanız, kültürünü belirtmeyi deneyin

using System; 
using System.Globalization; 
+4

'mm' dakikalar değil, aylar,' MM' için arıyorsunuz. Örneğinizin gösterdiği gibi. – Guvante

+0

@Guvante: Teşekkürler, düzeltdim. –

+0

Bir çekicilik gibi çalıştım! Çok teşekkürler! –

11

dikkatli olun; custom date and time format strings'da mm belirteci “aylar” değil “dakikalar” ifadesini temsil eder. Aylar için MM'u kullanmanız gerekir.

DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture) 
+0

Bunu bilmiyordum, teşekkürler! –