这段代码给了我这个错误:
var n = "9/7/2014 8:22:35 AM";
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
但是这段代码可以正常工作,并以正确的格式返回日期。
var n = DateTime.Now;
var m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
任何人都知道为什么第一个代码不起作用以及如何使其正常工作?
答案 0 :(得分:19)
您需要了解静态类型的工作原理。在第一个中,n
的类型为string
。类型string
确实有ToString()
方法,但该方法不带参数并返回相同的字符串对象,或者它需要格式提供程序。由于您提供了参数,因此编译器假定您指的是第二个版本,但类型不匹配。
您可能要做的就是首先将字符串转换为日期,这可以通过使用DateTime
的{{1}}或Parse
方法解析它来完成:
TryParse
在此,我们将var n = DateTime.Parse("9/7/2014 8:22:35 AM");
转换为string
。 DateTime
的类型为n
。
我认为在你弄清楚C#时使用DateTime
可能是一个好主意。如果明确列出类型,您将更好地了解正在发生的事情,编译器将更早地标记错误。在这种情况下,你会在第一行得到错误,这很明显。它会抱怨将字符串分配给var
。关于DateTime
没有奇怪的东西,这一点并不明显。你的代码看起来像这样:
IFormatProvider
在这个例子中,你会在第一行得到一个错误,然后你可以清楚地看到你正在尝试分配一个文字值(字符串“9/7/2014 8:22:35 AM”)将DateTime n = "9/7/2014 8:22:35 AM";
string m = n.ToString("yyyy-MM-dd'T'HH:mm:ssZ");
键入string
类型的变量,该变量无效。
答案 1 :(得分:1)
var n = "9/7/2014 8:22:35 AM";
这被视为String。你可以尝试这个工作
var n = DateTime.Parse("9/7/2014 8:22:35 AM");
var n = DateTime.Now;
这是一个DateTime对象