2011-08-13 3 views
-1

私はWP7アプリケーションを作成しており、その一部はDateTime値を使用しています。この値も(スターリングデータベースに)保存されます。WP7 DAteTimeの異なるロケール

私は日付の異なる文化の価値から離れようとしました。私はそれを提示する必要があります。自分のフォーマットを使用しています。私は決してそのようなDateTimeと「フィドル」をしません。

すべてが英語(ニュージーランドロケール)を実行している設定でPC上で、エミュレータで正常に動作します

しかし、携帯電話自体に、物事は日と月めちゃくちゃにされていたとして、めちゃくちゃにされていました。電話でのロケールは英語(米国)でしたが、地域の形式は英語(ニュージーランド)であることに気づいたことがあります。両方を英語(米国)に変更して、すべてが電話で正常です。

だから私の質問(複数可)/ Iは、異なるロケールと地域

2 /可能にするために

1必要があるのされ、この問題が発生しないことを確実にする簡単な方法はありますか?

のTextBlockテキスト= "{バインディングDateTimeDayString}"

とプロパティは次のように日付を表​​示するために、結合

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

       _nextDateTime = value; 
       RaisePropertyChanged(NextDateTimePropertyName); 

      } 
     } 

    } 

Aを次のように定義されたプロパティを次のように私のコードであります私のクラスの帽子には、バインディングにマップされます

public string DateTimeDayString 
    { 

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

    } 

電話機のロケールと地域が同じ国の場合、ロケールと地域が異なる場合(ロケール英語 - 英国と英語 - 米国)、 9月8日が「9月8日木曜日」と表示されます

異なるロケールと地域を持つことは珍しい設定ですが、私がこのことから自分自身を守る方法を探していました。

private DateTime _EventDateTime; 
    public DateTime EventDateTime 
    { 

     get 
     { 
      return _EventDateTime; 
     } 

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

      } 


     } 


    } 

そして、私は、このプロパティを格納する際

CurrSingleEventItem.NextDateTime = EVENTDATEを次のように日付がビューモデル内のプロパティと日付ピッカー制御

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

を介して選択されています.BuildDateTime(EventTime);

そしてBuildDateTime拡張メソッド(私は、ユーザーが

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; 

    } 
  • 感謝

    同様timepickerを経由して時間を入力過ごしていますので、 - ピーター

答えて

0

あなたは本当に何であったか言っていません間違っている - "昼と月が台無しにされていた"非常に正確ではありません。地域のフォーマットがニュージーランドに設定されていて、日付がdd/MM/yyyyの形式で表示されていた場合、これは全く合理的です。ニュージーランド(または英国、または米国以外のほとんどの場所)からのものです)おそらく期待するだろう。

異なるロケールと地域を許可する必要があるかどうかは、あなたのビジネスだけです。あなたは、アプリが複数の国で使用されることを期待していますか?もしそうなら、は文化に敏感でなければなりません。

第2の質問については、最初に「問題」があることはまったく明らかではありません。日付が単にニュージーランドスタイルで書かれていたのであれば、それは問題ではありません。何とか破損したデータで終わってしまったのであれば、それは別の問題です。

+0

Ok問題は、日と月が転置されていたことでした。私の質問は、異なるロケールと地域を許可しています....私は意図的にアプリケーション内の日付形式に依存せず、常に私が望む方法を提示するが、これはデータが格納されているとして頼ることはありません。私はDateTime変数に日付を格納しています。そして、おそらく、異なるロケールと地域を扱うように言わなければならないのは、電話機がその地域と異なるロケールを持っていた場合です。 – Peter

+0

@Peter:あなたは転置されていると言っていますが、*ユーザーが望むものは何ですか?どのように*ユーザー*が必要なのかを書式設定する必要があります。異なる文化のユーザーがいない場合は、それは問題ありませんが、異なる文化がどのように日付を設定するかを検討する必要があります。 'DateTime'自体にはフォーマット情報がないので、情報を失うことはありません。書式設定は、文化に関連付けられた 'DateFormatInfo'によって処理されます。あなたが本当に特定のフォーマットを強制したいのであれば、そうすることができます。 –

+0

ジョン...私が書いているフォーマットは文化に依存しないです。 mm/dd/yyとは対照的に、dd/mm/yyというより一般的な形式です。私は異なる文化の時代の陶器です。私は出した日付の書式設定に問題はない。私は文化特有のものを非常に意識しています。私はDateTimeがあなたの提案(フォーマット情報なし)として機能することを期待していたので、私が自分の日付をどのように提示したか分かっていれば大丈夫だろうと思っていました。私が発見したことは、電話機が地域と異なる地域で設定されている場合、その電話機が期待どおりに動作しないことです。 – Peter

関連する問題