我是c#的新手,我使用的是Windows窗体。
我正在尝试将datetimepicker
设置为星期一(一周的第一天),时间为10:00:00
时单击按钮。我的意思是不管我点击按钮的哪一天都是我想要的datetimepicker
到同一周的星期一,时间为10:00:00
例如,日期时间现为22/3/2016 11:15:00
我想将其设置为同一周的星期一(即昨天)上午10点= 21/3/2016 10:00:00
我尝试了这段代码,但明天会转到23/3/2016 10:00:00
。
private void button1_Click(object sender, EventArgs e)
{
dateTimePicker1.Value =
DateTime.Today.AddDays((int)DateTime.Today.DayOfWeek - 1).AddHours(10);
}
任何人都知道如何做到这一点?请帮忙,谢谢
答案 0 :(得分:4)
我认为应该这样做:
dateTimePicker1.Value = DateTime
.Today
.AddDays(-(DateTime.Today.DayOfWeek - DayOfWeek.Monday))
.AddHours(10);
请注意,如果在周日调用此功能,则会转到下周一。这与CultureInfo
一致,在大多数情况下,星期日被认为是一周的第一天。
如果您想使用当前文化来解释它(如果该文化说第一天是星期一),您可以这样做:
var now = DateTime.Today;
var firstDayOfWeek = Thread.CurrentThread.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
if (now.DayOfWeek == DayOfWeek.Sunday && firstDayOfWeek != DayOfWeek.Sunday)
now = now.AddDays(-1);
dateTimePicker1.Value = now.AddDays(-(now.DayOfWeek - DayOfWeek.Monday))
.AddHours(10);
由于dotNetFiddle
不允许更改文化,因此我无法摆脱这种情况,默认的一周中的第一天为Sunday
,但我已经过测试在本地,它的工作原理。
如果您的要求是您在问题中指定的要求,则以上所有内容均为:
我想设置我所在的星期一的星期一
如果你想要(更有可能)
我想今天上午10:00设置今天是星期一,或者上一个星期一 10:00“
这取决于您的周是否被定义为 从星期天,早上或任何事情开始,然后你可以做得更简单(虽然性能较差):
var now = DateTime.Today;
while(now.DayOfWeek != DayOfWeek.Monday)
now = now.AddDays(-1);
dateTimePicker1.Value = now.AddHours(10);
答案 1 :(得分:3)
也许这就是你想要的:
int origin = (int)(DateTime.Today.DayOfWeek) - 1;
if (origin < 0) origin = 6;
DateTime.Today.AddDays(-origin).AddHours(10);
答案 2 :(得分:1)
我的解决方案是
private static DateTime FirstDay(DateTime dateFrom)
{
dateFrom = dateFrom.AddDays(((int)dateFrom.DayOfWeek) * -1);
return new DateTime(dateFrom.Year, dateFrom.Month, dateFrom.Day, 10, 0, 0);
}