"{0:MM dd yyyy}"中的0是什么意思?

7

我是一个C# / MVC的新手。今天花了很多时间来弄清楚如何以我想要的格式显示DateTimeOffset对象。最终通过以下方式得到了它的工作:

Html.TextBoxFor(model => model.DeliveryDate,"{0:MM/dd/yyyy}", 
                     new { htmlAttributes = new { @class = "datepicker" } })  

但我仍然不明白格式字符串中“0”的重要性。如果我用其他数字替换0或完全删除它,页面会出现错误。有人能帮我理解吗?


3
在这个模型中,0将被日期值替换,格式为MM/dd/yyyy,用于替换DeliveryDate。 - rashfmnb
无法工作至今。 - chandu komati
5个回答

4

来自String.Format 方法

格式字符串中的 {0} 是一个格式项。0 是要插入在该位置的对象的索引。(索引从 0 开始) 如果要插入的对象不是字符串,则会调用它的 ToString 方法将其转换为字符串后再插入到结果字符串中。


感谢大家的回答。现在我明白了。我之前以为数字可以用来偏移日期,比如说几天之类的。非常感谢你们的回复,对我很有帮助。 - Ketki

2

这是一个带有参数的格式化字符串(例如在 Console.WriteLine 或 string.Format 中使用)。{0} 将作为第一个参数的占位符,而 {0:mm/dd/yyyy} 则是将第一个参数转换为字符串的格式化字符串。


2
当您使用 string.Format 方法时,可以像 {0}{1} 等一样传递参数的空格,这些索引是您作为该方法的参数传递的。这对于 asp.net razor helpers 也是一样的。
您还可以在索引后面用 : 分隔提供格式,例如:将 {0:0.00} 作为带有 2 个小数位的数字的格式,或者将 {1:dd/MM/yyyy} 作为日期等的格式。

字符串插值

有一种新的实现方法,即使用 字符串插值。基本上,您可以在不生成新字符串的情况下连接字符串中的值。例如:
var i = 18;
var s = $"You are {age} years old.";

由于您在字符串开头使用了$,因此可以在{}之间传递参数。您还可以使用与string.Format相同的格式来格式化数据。例如:

var today = $"Today is {DateTime.Now:D}";

var date = DateTime.Now.Add(1);
var tommorrow = $"Tommorrow is {date:dd/MM/yyyy}";

1
请查看 String.Format() 的文档:

https://msdn.microsoft.com/en-us/library/system.string.format.aspx

简而言之,当模型被渲染为HTML文本时,DeliveryDate对象的值将传递给String.Format(),其中{0}表示传递给Format()的值数组中第一个值的索引。因此,{0:MM/dd/yyyy}只是意味着使用日期组件格式化数组中的第一个值。基本上,它将在内部执行以下操作:
String s = SomeValueArray[0].ToString("MM/dd/yyyy");

0

0 是你的参数/属性(在这种情况下)DeliveryDate 的占位符。类似于 String.Format 的例子... 所以当你的视图被渲染时,0 将被替换为 DeliveryDate 在格式 MM/dd/yyyy 中所持有的任何值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接