我不确定它们是在哪个版本的 C# 中添加的,但是您现在可以使用格式说明符来格式化 DateTime
对象,如下所示:
var date = new DateTime(2021, 01, 01);
System.Console.WriteLine($"{date:MM.dd}"); // 01.01
现在我想从 DateTime
对象获取日历周。由于 ISO8601 指定的周编号与 .Net
使用的略有不同,因此我需要提供自定义逻辑来获取日历周。我现在遇到的问题不是如何获得正确的周数,因为微软在他们的博客中提供了一个解决方案,还有 ISOWeek
类,而是:如何添加自定义格式说明符,如上我可以做这样的事情吗?
var date = new DateTime(2021, 01, 01);
System.Console.WriteLine($"{date:WWW}"); // 53-2020
这在 C# 9 中是可能的吗?我猜不会,因为到目前为止我对这个话题的发现很少。
答案 0 :(得分:2)
您可以使用您要实现的新类型的字母和标记来实现自定义格式说明符。
但是您不能更改内置类型的可接受格式标记,例如 DateTime
。
请注意,在此上下文中,Microsoft 所谓的自定义格式说明符意味着将 DateTime
的可接受格式标记与 CultureInfo 内容结合在一起。
您可以查看 reference source DateTime
如何在内部使用类 DateTimeFormat
,该类具有它接受的一组固定标记。
我相信,您最好的方法是编写一个方法来获取字符串并将 "WW"
替换为 ISOWeek.GetWeekOfYear(date)
其他选项是:
IFormattable
的自定义类型,并转换为 DateTime、重载运算符和其他东西......这么多麻烦,不值得。顺便说一下,自定义日期时间格式说明符是在 c#6 中引入的。