我尝试了多种方法,这是其中之一:
System.Globalization.DateTimeFormatInfo format = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat;
return dt.Value.ToString (format.ShortTimePattern);
这个问题的问题是.NET 3.5返回一个"."作为时间分隔符,这很可能是一个错误(因为我的挪威语言环境使用冒号):.NET (3.5) 使用点而不是冒号来格式化时间作为 IT 文化的时间分隔符?
我也看了这里:在iPhone上检索当前本地时间?
但是MT似乎没有在NSDateFormatter上设置TimeStyle?
那么,有人有什么魔术吗?
我的目标是输出:
21:00/9:00 下午
上午10:09/10:09
就像iPhone中的状态栏一样。
试试这个:
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));
我对单声道来源进行了一个小研究,发现 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"(挪威尼诺斯克(挪威))语言环境对其进行测试。