如何使用 MonoTouch 以短时间格式将 DateTime 格式化为本地用户区域设置
Posted
技术标签:
【中文标题】如何使用 MonoTouch 以短时间格式将 DateTime 格式化为本地用户区域设置【英文标题】:How to format DateTime to local users locale in short time format using MonoTouch 【发布时间】:2012-09-26 08:11:15 【问题描述】:我尝试了多种方法,这是其中之一:
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
10:09 / 10:09 上午
就像 iPhone 中的状态栏。
【问题讨论】:
【参考方案1】:试试这个:
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));
【讨论】:
效果很好!我一直忘记许多 obj-c 方法是 MT 中的属性 :-)【参考方案2】:我对单声道源做了一个小研究,发现 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”(挪威尼诺斯克(挪威))语言环境对其进行测试。
【讨论】:
以上是关于如何使用 MonoTouch 以短时间格式将 DateTime 格式化为本地用户区域设置的主要内容,如果未能解决你的问题,请参考以下文章
UITextField 中的 C# Monotouch 电话号码格式
使用 Monotouch 时如何将 CGColor 转换为 NSObject?
Monotouch:如何将 UIView 添加到 DialogViewController