5

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

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

这个问题是 .NET 3.5 返回一个“。” 作为最有可能是错误的时间分隔符(因为我的挪威语言环境使用冒号) :.NET(3.5)使用点而不是冒号格式化时间作为 IT 文化的 TimeSeparator?

我也看过这里: 在 iPhone 上检索当前本地时间?

但是 MT 在 NSDateFormatter 上似乎没有 setTimeStyle?

那么,有人有什么神奇的技巧吗?

我的目标是输出:

晚上 21:00 / 晚上 9:00

上午 10:09 / 10:09

就像 iPhone 中的状态栏一样。

4

2 回答 2

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));
于 2012-09-26T09:38:49.830 回答
1

我对单声道源进行了小型研究,发现 ShortTimePattern 和 TimeSeperator 彼此不相关(如果我错了,请 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”(挪威尼诺斯克(挪威))语言环境对其进行测试。

于 2012-09-26T09:38:23.530 回答