如何将 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"
【问题讨论】:
日期没有格式。它们是二进制值。 仅在将文本解析为日期或将日期格式化为显示文本时使用格式。无论您在何处显示这些日期,都可以添加格式字符串或以您想要的格式调用ToString
或String.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:检测到循环引用