【问题标题】:Date format in "a.m." in c#“上午”中的日期格式在c#中
【发布时间】:2018-05-17 12:11:24
【问题描述】:

在应用程序中我遇到异常

"NexusDB: : 查询执行失败: 源字符串数据对于目标字段 (8) 来说太宽 (10) [字段: 时间开始] [$3CA0/15520]"

在尝试将日期字符串 28/05/2018 9:10:00 a.m. 插入到关联数据库中时。

正在将日期时间转换为字符串并将其发送到 dn,如下所示

dte.ToString("hh:mm tt");

但是当我得到一个上午而不是上午这个异常被抛出。

我可以通过哪种日期时间格式获取上午格式的日期?

【问题讨论】:

  • 听起来你想要“上午”而不是“上午” - 是对的吗? (你必须使用那种日期/时间格式吗?如果你可以使用 ISO-8601,它会在各种方面好得多......)
  • 请注意,“28/05/2018 9:10:00 AM”仍然比 8 个字符长得多,这就是错误消息所说的字段的最大长度。
  • 我敢肯定,存储在标准中会让生活更轻松。您的日期应尽可能接近日期对象,您的 UI 或解析例程应控制日期的显示方式。存储为2018-05-28T09:10 更便于您的源代码理解。
  • @DaisyShipton 他只保存了“hh:mm tt”部分
  • 同意这令人困惑。我猜这个问题是“09:10 AM”是8个字符,但是OP得到“09:10 am”。这是10个字符

标签: c# datetime


【解决方案1】:

当您使用ToString 方法的这种重载时,您使用的是系统的当前文化。 AM/PM 指示符取决于文化,因此如果您想使用可预测的 AM/PM 指示符,您必须明确提供转换文化:

dte.ToString("hh:mm tt", CultureInfo.InvariantCulture)

对于与文化无关的存储,CultureInfo.InvariantCulture 是推荐的方式。事实证明,它还准确地提供了您需要的 AM/PM 指示符。

【讨论】:

  • 可能值得注意的是CultureInfo.DateTimeFormat.AMDesignator 是 "AM" - 它不仅是可预测的,而且是可以预测的值:)
  • 我们将在哪种文化中将其称为“上午”还是“上午”?
  • 当您在答案中明确指定文化时,没有。
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2015-11-22
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多