2011-08-13 58 views
-1

我一直在編寫WP7應用程序,部分功能涉及使用DateTime值。該值也被存儲(在Sterling數據庫中)。WP7 DAteTime不同的語言環境

我試圖擺脫不同的文化價值在日期和我需要提出它的地方我使用我自己的格式。我從來不用'小子'這樣的日期時間。

一切工作正常與模擬器,電腦是安裝運行英語(新西蘭語言環境)上

但手機本身,事情被顛倒了的日和月,正在搞砸了。現在已經意識到電話上的語言環境是英語(美國),但區域格式是英語(新西蘭)。已經改變了英語(美國),並在手機上都很好。

所以我的問題(S)是

1 /我需要允許不同的語言環境和地區

2 /有一種簡單的方法,以確保不會出現這個問題?

我的代碼如下

定義爲A特性如下

public const string NextDateTimePropertyName = "NextDateTime"; 
    private DateTime _nextDateTime; 
    public DateTime NextDateTime 
    { 
     get 
     { 
      return _nextDateTime; 
     } 
     set 
     { 
      if (_nextDateTime != value) 
      { 

       _nextDateTime = value; 
       RaisePropertyChanged(NextDateTimePropertyName); 

      } 
     } 

    } 

A結合如下 TextBlock的文本以顯示日期= 「{結合DateTimeDayString}」

和屬性在我的班帽上映射到綁定

public string DateTimeDayString 
    { 

     get 
     { 
      return NextDateTime.ToString("dddd MMM d"); 
     } 

    } 

當電話區域和區​​域是同一個國家/地區時,一切正常,但是當區域設置和區域不同時,即區域英語 - 英國和英國 - 美國,則輸入的8月9日 將顯示爲「9月8日星期四」

我意識到擁有不同的語言環境和地區是一個不尋常的設置..但是看看我怎麼能保護自己免受這種情況。

日期正在經由DatePicker控件

x:Name="datePicker" Value="{Binding EventDate, Mode=TwoWay, UpdateSourceTrigger=Explicit}" 
       ValueChanged="datePicker_ValueChanged" ValueStringFormat="{}{0:D}" Margin="22,87,91,0" 

選擇與屬性在視圖模型如下

private DateTime _EventDateTime; 
    public DateTime EventDateTime 
    { 

     get 
     { 
      return _EventDateTime; 
     } 

     set 
     { 
      if (value != null) 
      { 
       _EventDateTime = value; 

      } 


     } 


    } 

當我存儲該屬性

CurrSingleEventItem.NextDateTime = EVENTDATE .BuildDateTime(EVENTTIME);

而且BuildDateTime擴展方法(因爲我有用戶通過timepicker進入時間以及

public static DateTime BuildDateTime(this String DateString, String time) 
    { 


     DateTime dt = System.Convert.ToDateTime(DateString); 
     DateTime timedt = System.Convert.ToDateTime(time); 
     string timestr = timedt.ToString("H:mm"); 
     DateTime newDt = System.Convert.ToDateTime(dt.ToLongDateString() + " " + timestr + ":00"); 
     return newDt; 

    } 
  • 感謝 - 彼得

回答

0

你真的沒有說什麼錯誤的 - 「日復一日被搞砸」並不十分精確。如果地區格式設置爲新西蘭,並且您看到的日期格式爲dd/MM/yyyy,這對我來說似乎完全合理 - 這是來自新西蘭(或英國,或除美國以外的大多數地方)的人...... )可能會期望。

至於你是否需要允許不同的地區和地區 - 這完全是你的業務。您是否期望該應用程序在多個國家使用?如果是這樣,那麼你絕對應該文化敏感。

至於你的第二個問題:一開始並不清楚是否有「問題」。如果日期簡單地以新西蘭風格格式化,我不認爲這是一個問題。如果你以某種方式結束了腐敗的數據,那是另一回事 - 你需要提供更多細節。

+0

好的問題是,日和月正在轉置。我的問題是考慮到不同的區域設置和區域....我故意不依賴應用程序中的日期格式,並始終以我想要的方式呈現它,但不要依賴此數據來存儲數據。我只是在一個DateTime變量中存儲一個日期,我認爲這個日期會處理一些事情。也許我應該說的重新處理不同的地區和地區,如果電話的地區與本地區不同。 – Peter

+0

@彼得:你說他們正在換位 - 但是*用戶想要什麼?你應該格式化*用戶*想要的方式,而不是*你想要的方式。如果你沒有任何不同文化的用戶,那很好 - 但是否則你需要考慮不同文化如何格式化日期。 'DateTime'本身沒有任何格式信息,所以你不會丟失信息。格式化由與文化相關聯的'DateFormatInfo'處理。如果你真的想強制一種特定的格式,你當然可以這麼做。 –

+0

Jon ...我放的格式是文化獨立。它的格式略有不同,通用性爲dd/mm/yy,而不是mm/dd/yy。我喜歡不同的文化日期。格式化我輸出的日期沒有問題。我非常清楚文化的具體內容。我曾預計DateTime會按照你的建議工作(沒有格式化信息),因此只要我知道我是如何呈現日期的,我就可以。我發現的是,當手機設置了與該地區不同的本地電話時,它不能按我的預期工作。 – Peter