【问题标题】:Deserializing DateTime format not working for Tues abbreviation反序列化 DateTime 格式不适用于周二缩写
【发布时间】:2019-12-06 11:48:05
【问题描述】:

我有以下 JSON 请求...来自第三方。

{
    "show_time": "Tues 28/08/2018 18:00",
    "end_time": "28/08/2018 07:55:00 PM",
}

而且,在 DTO 类中,我有以下日期时间转换器。

[Required]
[JsonProperty(PropertyName = "show_time")]
[JsonConverter(typeof(DateTimeFormatConverter), "ddd dd/MM/yyyy HH:mm")]
public DateTime ShowTime { get; set; }

还有,自定义 JsonConverter 类。

public class DateTimeFormatConverter : IsoDateTimeConverter
{
    public DateTimeFormatConverter(string format)
    {
        DateTimeFormat = format;
    }
}

但是我收到了这个错误...

FormatException: String 'Tues 28/08/2018 18:00' was not recognized as a valid DateTime.
System.DateTimeParse.ParseExact(ReadOnlySpan<char> s, ReadOnlySpan<char> format, DateTimeFormatInfo dtfi, DateTimeStyles style)

我该怎么办,其他缩写日期按预期工作(例如周一,周三)。

参考。

我的日期时间格式“ddd dd/MM/yyyy HH:mm”的来源

https://www.c-sharpcorner.com/blogs/date-and-time-format-in-c-sharp-programming1

【问题讨论】:

  • Tues 不是正常的缩写 - 它应该是 Tue
  • 如果你不能改变序列化部分,就不要考虑工作日(第一)部分(反正你不需要)。
  • @John 但它是参考。我的问题中的链接表明这是可能的。而这些数据来自第三方。有什么办法可以解决吗?
  • 鉴于这不是官方文档,我怀疑这是一个错字。 Official docs。就个人而言,我会创建一个转换器,将第一部分拆分出来,只使用dd/MM/yyyy HH:mm 部分。
  • Here is the IsoDateTimeConverter source code 作为起点。我可能只是在空间上分成 2 个字符串,然后忽略前半部分。

标签: c# .net-core json.net asp.net-core-webapi


【解决方案1】:

我最终采用了以下方法,因为整个应用程序都必须处理来自第三方系统的输入和输出这些类型的日期。

在 Startup.cs 中

        public void ConfigureServices(IServiceCollection services)
        {
            // Web API Culture Configuration
            RequestCulture rc = new RequestCulture("en-US");
            CultureInfo ci = rc.Culture;
            DateTimeFormatInfo dtfi = ci.DateTimeFormat;
            dtfi.AbbreviatedDayNames = new String[] { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
            services.Configure<RequestLocalizationOptions>(options =>
            {
                options.DefaultRequestCulture = rc;
            });

            // Other configurations
            ....
            ....
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {

            app.UseRequestLocalization();

            app.UseMvc();
        }

感谢问题下方的所有cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多