【问题标题】:Parsing date time strings with C# MVC [duplicate]使用 C# MVC 解析日期时间字符串 [重复]
【发布时间】:2019-03-21 20:17:51
【问题描述】:

我知道,如果您想在将 dateTime 字符串转换为 DateTime 对象时以特定格式解析它,您可以这样做

DateTime someDateTime = DateTime.ParseExact(myDateTime , "dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture);

但是,当使用 MVC C# 的模型绑定时,代码是这样声明的

public DateTime someDateTime {get; set;}

这样做时,如何设置传入日期字符串的格式?

【问题讨论】:

  • 绝对必须这样做吗?我希望模型绑定采用机器可读格式,通常是 ISO-8601。你有什么理由需要其他东西吗?
  • 我虽然 ISO-8601 是设置格式而不是固定格式的标准。即您可以设置 yyyy/mm/dd hh:mm 或 yy-m-D hh:MM:ss 或无数其他变体
  • 不,ISO-8601 是一种特定格式。 (有变体,例如是 20190321T205500 还是 2019-03-21T20:55:00。)但是“yyyy/mm/dd hh:mm”not ISO-8601
  • 你是说我可以假设 MVC 模型属性绑定中的 DateTime 对象默认需要 ISO-8601,我需要确保我提交的内容是该格式?跨度>
  • 这是我期望的结果,绝对值得一试。这是最合理、最标准化的格式。

标签: c# asp.net-mvc datetime model-binding


【解决方案1】:

您可以有一个单独的属性来获得日期的格式化版本:

public DateTime someDateTime { get; set; }

public DateTime someDateTimeFormatted {
    get {
        DateTime.ParseExact(someDateTime, "dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture);
    }
}

如果您尝试序列化的日期不会自然地序列化为日期时间,您可以为其编写自定义序列化,您可以将其作为字符串在请求中传递,并在类似的 diff 模型属性的 getter 中解析它someDateTimeFormatted 在上面做什么

【讨论】:

  • 我以为显示属性方式只设置了默认的显示格式。也可以用来设置解析格式吗?
  • 如果使用 get { DateTime.ParseExact(someDateTime, "dd MMM yyyy HH:mm:ss", CultureInfo.InvariantCulture); } 我肯定会使用 set (not get)
  • @megaman 它只需要一个 getter 并作用于具有集合的非格式化属性的值...我编辑了我的答案以尝试使这一点更清楚跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-23
相关资源
最近更新 更多