【问题标题】:Xamarin.Forms DatePicker always displays 12 hour format timeXamarin.Forms DatePicker 始终显示 12 小时格式时间
【发布时间】:2016-12-01 07:27:21
【问题描述】:

我对 DatePicker 视图有一个关于 DateTime 格式的奇怪问题。我的目标是获取从 00:00(24 小时)格式开始的日期和时间,但我总是以 12:00 AM(12 小时)格式获取时间。该代码位于 Xamarin.Forms PCL 库中:

        <DatePicker x:Name="TruckAuftragBeginDatetime" 
                  Format="dd.MM.yyyy"
                  TextColor="Aqua"
                  BackgroundColor="Black"
                  VerticalOptions="CenterAndExpand"
                  HorizontalOptions="EndAndExpand"
                  DateSelected="TruckAuftragBeginDatetimeOnDateSelected"></DatePicker>

我什至尝试将 Format 设置为 Format="dd.MM.yyyy HH:mm" 在我的 DateSelected EventHandler 中具有相同的结果。我总是得到类似的东西:

e.NewDate {11/30/2016 上午 12:00:00} 日期:{System.DateTime} 天数:30 DayOfWeek:System.DayOfWeek.Wednesday 日期:335 小时:0 种类:System.DateTimeKind.Unspecified 毫秒:0 分钟:0 月:11 第二:0 滴答声:636160608000000000 TimeOfDay: {System.TimeSpan} 年份:2016

sinceDateTime {11/30/2016 1:00:00 AM} 日期:{System.DateTime} 天数:30 DayOfWeek:System.DayOfWeek.Wednesday 日期:335 小时:1 种类:System.DateTimeKind.Local 毫秒:0 分钟:0 月:11 第二:0 滴答声:636160644000000000 TimeOfDay: {System.TimeSpan} 年份:2016

我的代码(事件处理程序):

    private async void TruckAuftragBeginDatetimeOnDateSelected(object sender, DateChangedEventArgs e)
    {
        var sinceDateTime = e.NewDate.ToLocalTime();
    }

作为一种临时解决方法,我采用 LocalTime,它在我的时区中提前一小时。

问题:

如何获得 24 小时格式的日期时间,结果如下:

e.NewDate {11/30/2016 00:00:00} 日期:{System.DateTime} 天:30 DayOfWeek:System.DayOfWeek.Wednesday DayOfYear:335 小时:0 种类: System.DateTimeKind.Unspecified 毫秒:0 分钟:0 月:11 第二:0 滴答声:636160608000000000 TimeOfDay:{System.TimeSpan} 年: 2016

【问题讨论】:

  • 您好,老实说我没有测试过,但可能取决于设备的设置,您是否尝试过在那里更改时间格式?
  • 我很确定这取决于设备的区域设置和设置
  • 非常感谢您的所有建议。我想 Kovac 先生添加的链接是唯一的方法。我尝试在手机中设置为德语,但这并没有改变任何东西。我真正不明白的是,即使我用实例化了一个全新的 DateTime
  • var date = new DateTime(2016,12,1,0,0,0) 我得到 1.12.2016 12:00 AM 而不是 1.12.2016 00:00 。我是标准控制台应用程序,我得到 1.12.2016 00:00(24 小时格式)嗯...

标签: xamarin xamarin.forms cross-platform


【解决方案1】:

试试这个 return NewDate.Value.ToString("HH:mm");

【讨论】:

  • 非常感谢阿迪特。我需要 DateTime 实例。我尝试使用 ToString 进行此操作,但即使我尝试使用 DateTime.ParseExact(date,"ddMMyyyyHHmm") 将其解析回 DateTime 实例中,我也会得到一个 12 小时格式的日期,例如 02.12.2016 12:00 AM。我想我必须像科瓦奇先生评论的那样去做。
【解决方案2】:

带有代码和观察窗口的屏幕截图:

【讨论】:

  • 嗨 Yuri,我从 DatePicker 中获取一个日期,并在 Linq 查询中将其用作下限日期范围,以按该日期过滤数据。例如,我选择 01.12.2016,然后我只想显示自 01.12.2016 00:00:00 以来的数据记录。使用 DatePicker 日期,我得到 01.02.2016 12:00 AM,这将是我的数据记录日期的正午(中午)日期。数据记录日期是 DateTimeOffset 类型的 Azure 移动应用程序 UpdatedAt 字段?的离线同步表记录。
  • 我还是不明白。如果您需要 DateTime 对象,只需使用从选择器收到的对象。如果您需要字符串,我向您展示了如何将其转换为 24 小时格式字符串。如果您需要创建 DateTimeOffset 使用构造函数并从选择器传递 DateTime。究竟是什么不起作用?
  • 日期记录DatetimeOffset?是 24 小时格式。 DatePicker 日期采用 12 小时格式。我想要 24 小时格式的 DatePicker 日期。
  • DatePicker 日期是一个 DATE。在您将其解析为字符串之前,它不是任何格式。可以直接使用
  • Ahhmm.. 所以 DateTimeOffset 的值为 "01.12.2016 00:00:00" == "01.12.2016 12:00 AM" ?
猜你喜欢
  • 2022-08-08
  • 2014-04-15
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
相关资源
最近更新 更多