如何将 DateTime 值序列化为“yyyy-MM”? [复制]

Posted

技术标签:

【中文标题】如何将 DateTime 值序列化为“yyyy-MM”? [复制]【英文标题】:How can I serialize DateTime values as `yyyy-MM`? [duplicate] 【发布时间】:2020-03-17 05:41:18 【问题描述】:

在 ASP.NET MVC 应用程序中,我以这种方式从数据库中获取日期:

public class MonthController : ApiController


    public List<Month> monthContainer;

    public List<Month> getMonth()
    
        DataContext dataContext = new DataContext();

        monthContainer = (from d in dataContext.Duties
                          select new Month()
                          
                              MonthDate = d.Date
                          ).ToList();
        return monthContainer;
    

答案是这样格式的日期:


    "MonthDate": "2015-10-01T00:00:00"
,

    "MonthDate": "2015-10-02T00:00:00"

所以它会在 MonthDate 的每一天一直持续到某一年。 我怎样才能以这种格式只提取几个月而没有双打? 如何在控制器中进行更改? 我想得到这种格式:

    "MonthDate": "2015-10"
    "MonthDate": "2015-11"
    "MonthDate": "2015-12"
    "MonthDate": "2016-01"
... "MonthDate": "2019-12"

【问题讨论】:

日期没有格式。它们是二进制值。 在将文本解析为日期或将日期格式化为显示文本时使用格式。无论您在何处显示这些日期,都可以添加格式字符串或以您想要的格式调用ToStringString.Format 如何显示这些日期?这就是您需要使用格式化的地方。至少贴出相关的视图代码 你可以使用DisplayFormat属性告诉MVC如何格式化特定的字段。您可以将[DisplayFormat(DataFormatString = "0:yyyy-MM")] 添加到MonthDate 属性 您可能需要将Month 类的MonthDate 属性更改为字符串类型。那么您可以使用以下代码。 monthContainer = (from d in dataContext.Duties select new Month() MonthDate = d.Date.ToString("yyyy-MM", CultureInfo.InvariantCulture) ).ToList();因为date 类型没有任何格式,它是一个二进制值,您可以在转换为字符串时对其进行格式化。 @Panagiotis Kanavos,嗨!重复的解决方案帮助了我,我在模型中创建了新类,他们转换了我的 JSON,谢谢! 【参考方案1】:

请像这样使用 DateTime.ParseExact :

DateTime.ParseExact(MonthDate.ToString(), "yy/MM/dd HH:mm:ss", 
    CultureInfo.InvariantCulture
    ).ToString("yyyy-MM")

【讨论】:

嗨!请告诉我,这段代码会在代码的哪一部分正确添加? @just none - 两个答案都是错误的。日期在 view 中格式化,而不是在查询中。发布您的查看代码 OP 询问格式化,而不是解析。无论如何,该字符串与yy/MM/dd HH:mm:ss 不匹配。此外,如果MonthDate已经是一个日期,那么解析的意义何在?【参考方案2】:

您必须使用 parseExact 方法,例如:

MonthDate = DateTime.ParseExact(d.Date, "yyyy-MM",CultureInfo.InvariantCulture);

一些文档: https://docs.microsoft.com/en-us/dotnet/api/system.datetime.parseexact?view=netframework-4.8

【讨论】:

OP 询问格式化,而不是解析。无论如何,该字符串与yyyy-MM 不匹配 他没有要求格式化或解析,他只是说他想将日期转换为特定格式 这就是格式化的意思。即使在 SQL 中,CONVERT 也会将非文本值格式化为预定义格式的字符串

以上是关于如何将 DateTime 值序列化为“yyyy-MM”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Django 将日期时间序列化为 QuerySet/Dict 中的 json

将输出序列化为 JSON - ValueError:检测到循环引用

将输出序列化为 JSON - ValueError:检测到循环引用

如何使用 kotlinx 序列化将值数组反序列化为集合

如何将字符串序列化为 JSON 并按其中一个值分组?

将表单数据序列化为 JSON 时如何保留值类型