如何使用MonoTouch以短时间格式将DateTime格式化为本地用户区域设置

时间:2012-09-26 08:11:15

标签: datetime xamarin.ios nsdateformatter

我尝试了多种方法,这是其中之一:

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

这个问题是.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?

那么,任何人都有任何魔术伎俩?

我的目标是输出:

21:00 / 9:00 PM

10:09 / 10:09 AM

就像iPhone中的状态栏一样。

2 个答案:

答案 0 :(得分:6)

试试这个:

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

也就是说,使用点/冒号作为挪威语言环境的时间分隔符的错误已在Mono 2.12中修复,因此当MonoTouch切换到使用Mono 2.12而不是Mono 2.10(希望明年年初)时,您将能够使用这个管理的替代方案也是:

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

答案 1 :(得分: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”(挪威尼诺斯克(挪威))地区进行测试。