Xamarin.iOS UITextField 日期格式无效

Xamarin.iOS UITextField date format not working

我有一个 UITextField,单击它会打开一个 DatePicker。我希望时间显示在 hh:mm tt 的 TextField 中(例如 2:10 PM)

void InitTimePicker()
{
    timePicker = new ModalPickerViewController(ModalPickerType.Date, "Select A Time", this)
    {
        HeaderBackgroundColor = UIColor.Red,
        HeaderTextColor = UIColor.White,
        TransitioningDelegate = new ModalPickerTransitionDelegate(),
        ModalPresentationStyle = UIModalPresentationStyle.Custom
    };
    timePicker.DatePicker.Mode = UIDatePickerMode.Time;
    timePicker.OnModalPickerDismissed += (sim, ea) =>
    {
        var timeFormatter = new NSDateFormatter()
        {
            DateFormat = "hh:mm tt"
        };
        vitalEntryTimeTextField.Text = timeFormatter.ToString(timePicker.DatePicker.Date);
    };
    vitalEntryTimeTextField.ShouldBeginEditing = (textView) =>
    {
        textView.ResignFirstResponder();
        PresentViewControllerAsync(timePicker, true);
        return true;
    };
}

DatePicker 显示并且一切正常。但是当我 select 日期选择器中的时间并单击完成时,TextField 中显示的时间就像 2:10。 AM/PM 没有显示,尽管我指定了

DateFormat = "hh:mm tt"

我做错了什么?

此处您使用的是来自 iOS SDK 的 NSDateFormatter,但使用 C# specifiers

指定 DateFormat

AM/PM 当 iOS 设备打开 24 小时制时将不会显示:

Settings -> General -> Date & Time -> 24 Hour

显然,您不能保证不会在每台设备上启用 24 小时制。

您可以为时间格式指定语言环境。具体来说,en_US 默认使用 12 小时时间。

NSLocale myLocale = new NSLocale("en_US");
var timeFormatter = new NSDateFormatter()
{
    Locale = myLocale,
    DateFormat = "hh:mm a"
};

这会给你 01:15 PM

使用HH:mm a给你类似13:15 PM的东西。