如何使用自定义时间将datetimepicker设置为星期一?

时间:2016-03-22 11:27:06

标签: c#

我是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);
}

任何人都知道如何做到这一点?请帮忙,谢谢

3 个答案:

答案 0 :(得分:4)

我认为应该这样做:

dateTimePicker1.Value = DateTime
                          .Today
                          .AddDays(-(DateTime.Today.DayOfWeek - DayOfWeek.Monday))
                          .AddHours(10);

I've made a fiddle

请注意,如果在周日调用此功能,则会转到下周一。这与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);
}