Asp.net 年度最短日期

Asp.net 年度最短日期,asp.net,Asp.net,我有一个文本框,我必须在该文本框中显示当前年份的最短日期 这意味着: 假设我选择当前时间(09/11/2009) 然后(01/01/2009)应显示在文本框中 等待您的回复编辑: 正如诺多林指出的,最简单、最简洁的解决方案是这样的: var firstDayOfYear = new DateTime(DateTime.Today.Year, 1, 1); 我的老答案: 这应该可以做到 var now = DateTime.Now var firstDayOfYear = now.Subtrac

我有一个文本框,我必须在该文本框中显示当前年份的最短日期

这意味着: 假设我选择当前时间(09/11/2009) 然后(01/01/2009)应显示在文本框中

等待您的回复

编辑: 正如诺多林指出的,最简单、最简洁的解决方案是这样的:

var firstDayOfYear = new DateTime(DateTime.Today.Year, 1, 1);
我的老答案:

这应该可以做到

var now = DateTime.Now
var firstDayOfYear = now.Subtract(TimeSpan.FromDays(now.DayOfYear - 1)).Date
编辑: 实际上这会更干净一些:

var today = DateTime.Today
var firstDayOfYear = today.Subtract(TimeSpan.FromDays(today.DayOfYear - 1))

您只需要构造一个新的
DateTime
,使用相同的年份,并将其他参数设置为一(第一天和第一个月)


假设可以从文本框中获取DateTime对象(例如DateTime.Parse(…),则可以执行以下操作:

DateTime inputDate = DateTime.Parse(textBox.Text);
DateTime outputDate = new DateTime(inputDate.Year, 1, 1);

我过去也不得不解决同样的问题。最后,我决定为DateTime类创建一个扩展方法类来封装和测试尽管简单的功能

public static class DateTimeExtensions
{
    public static DateTime GetFirstDayOfYear(this DateTime date)
    {
        return new DateTime(date.Year, 1, 1);
    }
}
现在我要做的就是得到所需的日期

DateTime selectedDate = DateTime.Today;
DateTime firstDayOfYear = selectedDate.GetFirstDayOfYear();

这将引发异常,因为0是无效的月/日。0是DateTime构造函数中月和日的有效值吗?我不知道,我建议:新的DateTime(DateTime.Today,1,1);稍微好一点(假设我们是说服务器端)。@Murph:你是说
DateTime.Today.Year
?我并不认为这有什么好处,当然它也同样有效。我想我们在这里讨论的一定是服务器端,标签是
asp.net
。是的,意思是.year,-你是对的,在上下文中,.Now和.Today之间没有太大区别,-除了如果你考虑的是日期而不是日期/时间,我认为最好今天使用,因为你的意图更明显。至于假设它的服务器端-它假设标记是正确的,我开发asp.net站点,并且在我的asp.net站点中不时出现客户端javascript问题。。。很久很久以前,我们被教导在编程时永远不要假设——有时我可能会走得太远,但也不是没有理由(根据经验)是的,我想我们必须等着瞧。不过,如果是AJAX,则问题可以在服务器端解决。:)。今天可能会比现在好。现在,实际上做总和是不必要的-只是创建一个新的日期?是的,我在编辑中使用今天,你是对的。创建新日期时间和求和在功能上没有区别。我想这是个人品味的问题。但我投票支持诺多林的答案,所以我也同意这是一种很好的方式。这里有一个错误:它得到了前一年的最后一天(例如,在2009年1月1日,它是第一天,减少1将需要它到2008年12月31日)@Patrik-我在考虑效率/工作(最终,该总和必须创建一个新的日期时间)还有意图的清晰性。@Elisha-谢谢你指出这一点,我编辑了这个。
DateTime selectedDate = DateTime.Today;
DateTime firstDayOfYear = selectedDate.GetFirstDayOfYear();