2012-09-26 12 views
5

を使用して、短い時間形式でロケールのDateTimeをフォーマットする方法:ローカルユーザーが、私は、これはその一つで、複数のアプローチを試してみたMonoTouchで

System.Globalization.DateTimeFormatInfo format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;  
return dt.Value.ToString (format.ShortTimePattern); 

この1の問題点は、その.NET 3.5リターンです " "最も可能性の高いバグ(私のノルウェーのロケールは、コロンを使用しているので)で、時間区切り文字として: .NET (3.5) formats times using dots instead of colons as TimeSeparator for it-IT culture?

また、私はここに見えた: Retrieving current local time on iPhone?

をしかし、MTはNSDateFormatterにsetTimeStyleを持っていないようですか?

だから、誰でも袖の上に魔法の技を持っていますか?

私の目標は、出力にある:iPhoneでのステータスバーのような

21:00/21:00

10:09/10:09

答えて

6

これを試してください:前記

var formatter = new NSDateFormatter(); 
formatter.TimeStyle = NSDateFormatterStyle.Short; 
Console.WriteLine (formatter.ToString (DateTime.Now)); 

、ノルウェーのロケールの時間の区切りがモノラル2.12で修正されているようなドット/コロンのバグは、そうMonoTouchでは、モノ2.12代わりにモノ2.10(使用するように切り替えるとうまくいけば来年早々)あなたはこの管理された選択肢を使用することもできます:

Console.WriteLine (DateTime.Now.ToString (new CultureInfo ("nb-NO").DateTimeFormat.ShortTimePattern)); 
+0

素晴らしいです!私はobj-cメソッドの多くがMTのプロパティであることを忘れています:-) –

1

私はモノのソースに関する小さな研究を行い、ShortTimePatternとTimeSeperatorがnot relate on each otherであることを発見しました(私が間違っていると、Mono-guruは私に訂正してください)。

そこで、私はiOS専用(クロスプラットフォームではない)ソリューションを作成しようとしました。つまり、次のとおりです。

using MonoTouch.Foundation; 
    ... 
    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     var d = DateTime.Now; 
     Console.WriteLine("NSDate: " + GetCorrectTime(d)); 
    } 
    ... 
     // iOS-only (not cross-platform) 
    public string GetCorrectTime (DateTime d) 
    { 
     var nsdate = DateTimeToNSDate(d); 
     var nsdateformatter = new .NSDateFormatter(); 
     nsdateformatter.DateStyle = NSDateFormatterStyle.None; 
     nsdateformatter.TimeStyle = NSDateFormatterStyle.Short; 
     return nsdateformatter.ToString(nsdate); 
    } 
    ... 
     // DateTime to NSDate was taken from [that post][2] 
    public static NSDate DateTimeToNSDate(DateTime date) 
    { 
     return NSDate.FromTimeIntervalSinceReferenceDate((date-(new DateTime(2001,1,1,0,0,0))).TotalSeconds); 
    } 

出力:

NSDate: 17:40 

私はシミュレータと "NN-NO"(ノルウェー語(ノルウェー))ロケールでそれをテストしたいので、予めご了承ください。

関連する問題