Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用DateTime将变量作为参数传递_C#_Datetime - Fatal编程技术网

C# 如何使用DateTime将变量作为参数传递

C# 如何使用DateTime将变量作为参数传递,c#,datetime,C#,Datetime,目前正在编写一些代码,我想使用DateTime.Parse,传递一个指定格式的字符串,但也包含一些变量 示例: DateTime first_day = DateTime.Parse("{0}/01/{1}", Today.Month - 1, Today.Year - 1); DateTime first_day = DateTime.Parse("12/01/{0}", Today.Year - 1); 有没有办法做到这一点?您可以使用Comed with like 及 在DateTim

目前正在编写一些代码,我想使用DateTime.Parse,传递一个指定格式的字符串,但也包含一些变量

示例:

DateTime first_day = DateTime.Parse("{0}/01/{1}", Today.Month - 1, Today.Year - 1); 
DateTime first_day = DateTime.Parse("12/01/{0}", Today.Year - 1);
有没有办法做到这一点?

您可以使用Comed with like

在DateTime.Parse方法中不需要任何参数。此方法不支持,因此无法执行此操作

您也可以将构造函数用作Ed,它将年、月和日作为参数

顺便说一句,正如Matt提到的,这些第一个月的计算是一种反模式,它们可以引导你找到一些不存在的日期

您可以使用string.Format,如下所示:

var first_day = DateTime.Parse(string.Format("{0}/01/{1}", DateTime.Today.Month - 1, DateTime.Today.Year - 1));

不要使用字符串插值或操纵传递给构造函数的变量。这两种方法都会导致尝试创建不存在的日期

例如,当今天是7月31日时,尝试创建6月31日的日期将在使用DateTime.Parse时引发FormatException,或在使用DateTime构造函数时引发ArgumentOutOfRangeException

同样,只有当相关年份是闰年时,尝试创建2月29日的日期才有效。2020-02-29有效,但2019-02-29无效

此外,在1月份传递日期(如2020-01-01)将尝试在2019-00-01月份创建一个日期,这也是无效的

相反,请使用AddYears和/或AddMonths方法:

这些将正确地移回有效日期。7月31日-1个月变为6月30日。2020年2月29日-2019年2月28日为一年,以此类推

如果您需要捕捉到月初,则可以执行以下操作:

DateTime dt = DateTime.Today.AddYears(-1).AddMonths(-1);
DateTime first_day = new DateTime(dt.Year, dt.Month, 1);

所有月份都有一个第1天。

我不明白这段代码的目标是什么。我会使用DateTime构造函数,它将整型的年、月和日作为参数。或者今天。AddMonth-1.AddYear-1。除非这里有一些非常特殊的要求,否则可能不需要涉及字符串和解析。最后,您将尝试创建不存在的日期,例如6月31日。第一年更为危险,导致在闰年运行时创建普通年份的2月29日。其中一个将抛出DateTime.Parse或new DateTime的异常。相反,请使用Ed提到的AddMonth和AddYear方法。@Boballendo您可能使用的是C 6.0的较低版本。没关系。相反,您可以使用新的DateTimeInt32、Int32、Int32构造函数,正如我在最后提到的那样。另一个选项可能是在DateTime.Parse方法中使用string.Format,但这似乎有些过分。只有使用使用月/日/年排序的格式提供程序进行解析时,以及当日期为01时(如图所示),此选项才起作用。如果日期不固定为01,那么当超过无效日期时,它可能会抛出FormatException。实际上,我也错过了1月份1不工作的那个月。没有第0个月。所以仍然不是一个好办法。
var first_day = DateTime.Parse(string.Format("{0}/01/{1}", DateTime.Today.Month - 1, DateTime.Today.Year - 1));
DateTime first_day = DateTime.Today.AddYears(-1).AddMonths(-1); 
DateTime second_day = DateTime.Today.AddYears(-1);
DateTime dt = DateTime.Today.AddYears(-1).AddMonths(-1);
DateTime first_day = new DateTime(dt.Year, dt.Month, 1);