我希望能够根据存储在变量中的格式来更改字符串的格式:
DateTime dd = Convert.ToDateTime("2018-6-1");
string.Format(new System.Globalization.CultureInfo("en-GB"),$"{dd:D}").Dump();
string foo = "D";
string.Format(new System.Globalization.CultureInfo("en-GB"), $"{dd}:{foo}").Dump();
在上面的示例中,在第4行,我希望能够以动态格式打印日期-格式存储为变量。
当前,第2行的输出符合预期,是“ 2018年6月1日,星期五”,而第4行的输出是:“ 01/06/2018 0:00:00:D”
有人知道如何解决吗?
谢谢
答案 0 :(得分:2)
您需要这个:
string.Format(new System.Globalization.CultureInfo("en-GB"), $"{{0:{foo}}}", dd)
插值字符串的计算结果为"{0:D}"
,请注意如何使用双括号将$""
字符串中的单个括号转义。
答案 1 :(得分:1)
您当前的方法不正确。 string.Format
的签名如下:
Format(IFormatProvider, String, Object)
就目前而言,您正在击中这个:
Format(IFormatProvider, String, Object[])
为什么?因为您使用的是插值字符串($""
)。格式化实际上是在插值字符串内进行的,而不是在Format(...)
内进行的,因此文化信息正在丢失,因为插值字符串只是向前传递。
有两种解决方法:
正确使用Format
:
string.Format(new System.Globalization.CultureInfo("en-GB"), $"{{0:{foo}}}", dd).Dump();
这会将格式评估为“ {0:D}”,然后将其(与区域性一起使用)应用于dd以产生结果。
在日期对象上使用ToString
:
dd.ToString(new System.Globalization.CultureInfo("en-GB"), foo).Dump();