2013-07-25 18 views
1

如果我運行從我的測試機器意大利這個控制檯應用程序:C#的DateTime轉換同一文化

static void Main(string[] args) 
    { 
     String date = DateTime.Now.ToString("yyyy-MM-dd HH:mm", new CultureInfo("it-IT")); 
     Console.WriteLine(date); 
     Console.ReadKey(); 
     CultureInfo ci = new CultureInfo("it-IT"); 
       Console.WriteLine("Time: " + ci.Name + " " + ci.DateTimeFormat.TimeSeparator); 
       Console.WriteLine("Date: " + ci.Name + " " + ci.DateTimeFormat.DateSeparator); 
     Console.ReadKey(); 
    } 

顯示:

2013年7月25日15:40時間:IT- IT:日期:它-IT/

,但如果我從美國的服務器運行這段代碼:

2013-07-25 15.40時間:it-IT。日期:it-it/

爲什麼不同的格式分隔符的時間部分?正確的意大利必須:

+0

都在相同的Windows上運行平臺?也許一箇舊版本有不同的時間分隔符。 –

+0

我的意大利機器是Windows 7,美國機器是一個虛擬的天青機器運行Windows Server 2012 – UnoSolo

回答

2

你發現自己,更改版本之間的Windows(爲意大利時間分隔符的數據結腸是更新版本)。這是我們正在改進我們的數據的預期。如果您發現這是因爲在機器之間傳輸數據,則應該使用標準不變格式(如ISO 8601),這些格式不受數據更改的影響。

-1

更換

ci.DateTimeFormat.TimeSeparator 

DateTimeFormatInfo.CurrentInfo.TimeSeparator; 
+0

ci.DateTimeFormat.TimeSeparator提供了「it-IT」的時間分隔符,這是ToString方法中的要求,因爲CultureInfo是直接提供。如果沒有提供,那麼當前文化信息的信息將是相關的,並且一種獲得這種信息的方式就是你所指示的。 –

1

我剛碰到這個問題。 有時我認爲這個問題是因爲有一個用戶覆蓋。

我建議使用加載的CultureInfo:

CultureInfo的CI =新的CultureInfo( 「IT-IT」,假);

指定false爲useUserOverride參數強制繞過任何用戶設置。

在任何情況下,Win8和Win7都會有變化。運行下面的代碼(.NET 4.5):

CultureInfo ci = new CultureInfo("it-IT", false); 

String date = DateTime.Now.ToString(ci); 
Console.WriteLine(date); 
Console.WriteLine("Time Separator: " + ci.DateTimeFormat.TimeSeparator); 
Console.WriteLine("Date Separaotr: " + ci.DateTimeFormat.DateSeparator); 
Console.ReadKey(); 

在Win 7產品:

29/10/2013 14:12:33 
Time Separator: : 
Date Separaotr:/

而在Win 8產品運行它:

29/10/2013 15.08.43 
Time Separator: . 
Date Separaotr:/