2012-09-26 18 views
5

Tôi đã thử nhiều cách tiếp cận, đây là một trong số họ:Làm thế nào để định dạng DateTime cho người dùng địa phương miền địa phương trong định dạng thời gian ngắn sử dụng MonoTouch

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

Vấn đề với cái này là .NET 3.5 trở về một " . " như seperator thời gian đó rất có thể là một lỗi (vì locale Na Uy của tôi sử dụng dấu hai chấm): .NET (3.5) formats times using dots instead of colons as TimeSeparator for it-IT culture?

Tôi cũng nhìn ở đây: Retrieving current local time on iPhone?

Nhưng MT dường như không có setTimeStyle trên NSDateFormatter?

Vì vậy, bất kỳ ai có bất kỳ thủ thuật ảo nào trong tay áo của họ?

Mục tiêu của tôi là để đầu ra:

21:00/9:00 PM

10:09/10:09 AM

như statusbar trong iPhone.

Trả lời

6

Hãy thử điều này:

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

Điều đó nói rằng, lỗi với dấu chấm/thư đại tràng như tách thời gian cho miền địa phương Na Uy đã được cố định trong Mono 2.12, vì vậy khi MonoTouch chuyển sang sử dụng Mono 2.12 thay vì Mono 2.10 (hy vọng vào đầu năm tới), bạn cũng sẽ có thể sử dụng phương án được quản lý này:

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

Hoạt động tuyệt vời! Tôi quên rằng nhiều phương pháp obj-c là các thuộc tính trong MT :-) –

1

Tôi đã thực hiện một nghiên cứu nhỏ về các nguồn đơn âm và nhận thấy rằng ShortTimePattern và TimeSeperator là not relate on each other (hãy làm đúng với Mono-guru nếu tôi sai).

Vì vậy, tôi đã cố gắng tạo giải pháp chỉ dành cho iOS (không phải nền tảng chéo). Đó là là:

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); 
    } 

Output:

NSDate: 17:40 

Xin lưu ý rằng tôi muốn thử nghiệm nó với mô phỏng và "nn-NO" (Norwegian Nynorsk (Na Uy)) locale.