Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# 生成每周日期_C#_Wpf_Winforms_Silverlight_Date - Fatal编程技术网

C# 生成每周日期

C# 生成每周日期,c#,wpf,winforms,silverlight,date,C#,Wpf,Winforms,Silverlight,Date,我相信这已经做过,所以我正在寻找一个有效的解决方案,而不是自己的自定义解决方案 给定2个日期,我试图生成准确的每周日期(用于创建每周订单) 编辑:我需要使用.NET标准库来完成此操作 Example below, Given 28/02/2012 and 6/03/2012. so, the weekly dates generated are - Week From(Start Monday): Week To(End Sunday): - 27/02/2012

我相信这已经做过,所以我正在寻找一个有效的解决方案,而不是自己的自定义解决方案

给定2个日期,我试图生成准确的每周日期(用于创建每周订单)

编辑:我需要使用.NET标准库来完成此操作

Example below,

Given 28/02/2012 and 6/03/2012.

so, the weekly dates generated are
- Week From(Start Monday):   Week To(End Sunday):
- 27/02/2012               - 04/03/2012
- 05/03/2012               - 11/03/2012

Another example (1 month)

Given 01/02/2012 and 29/02/2012
so, the weekly dates generated are
- Week From(Start Monday):   Week To(End Sunday):
- 30/01/2012               - 05/02/2012
- 06/02/2012               - 12/02/2012
- 13/02/2012               - 19/02/2012
- 20/02/2012               - 26/02/2012
- 27/02/2012               - 04/03/2012
我用c#做这件事。这以前做过吗?介意分享解决方案吗


干杯

这里有一个使用的解决方案。诚然,它需要一个
假设您不必计算开始日期是星期一:

var slots = new List<Tuple<DateTime, DateTime>>();
DateTime start = new DateTime(2012, 2, 28);
DateTime end = new DateTime(2012, 3, 6);
for (DateTime i = start; i < end; i = i.AddDays(7))
{
    slots.Add(new Tuple<DateTime, DateTime>(i, i.AddDays(6)));
}

foreach (var slot in slots)
{
    Console.WriteLine("{0}\t{1}", slot.Item1.ToString("dd/MM/yyyy"), slot.Item2.ToString("dd/MM/yyyy"));
}
var slots=newlist();
DateTime开始=新的日期时间(2012,2,28);
DateTime end=新的DateTime(2012,3,6);
for(DateTime i=start;i
编辑:假设你必须计算出星期一和星期天的日期范围,你可以向后移动一天直到星期一,向前移动一天直到星期天

class Program
{
    static void Main(string[] args)
    {
        var slots = new List<Tuple<DateTime, DateTime>>();
        DateTime start = FirstMonday(new DateTime(2012, 2, 28));
        DateTime end = FirstSunday(new DateTime(2012, 3, 6));
        for (DateTime i = start; i < end; i = i.AddDays(7))
        {
            slots.Add(new Tuple<DateTime, DateTime>(i, i.AddDays(6)));
        }

        foreach (var slot in slots)
        {
            Console.WriteLine("{0}\t{1}", slot.Item1.ToString("dd/MM/yyyy"), slot.Item2.ToString("dd/MM/yyyy"));
        }

        Console.ReadLine();
    }

    static DateTime FirstMonday(DateTime date)
    {
        while (date.DayOfWeek != DayOfWeek.Monday) date = date.AddDays(-1);
        return date;
    }
    static DateTime FirstSunday(DateTime date)
    {
        while (date.DayOfWeek != DayOfWeek.Sunday) date = date.AddDays(1);
        return date;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
var slots=新列表();
DateTime开始=第一个星期一(新的DateTime(2012,2,28));
DateTime end=FirstSunday(新的DateTime(2012,3,6));
for(DateTime i=start;i
此解决方案允许您自定义每周的开始和结束日期:

解决方案:

public Dictionary<DateTime, DateTime> GetWeeklyDateTimes(DateTime from, DateTime to, DayOfWeek startDay, DayOfWeek endDay)
    {
        int startEndSpan = 7 - endDay - startDay;

        // Subtract days until it falls on our desired start day
        from = from.AddDays(startDay - from.DayOfWeek);
        // Add days until it falls on our desired end day
        to = to.AddDays(to.DayOfWeek - endDay + 2);

        Dictionary<DateTime, DateTime> dateTimes = new Dictionary<DateTime, DateTime>();

        while (to.Subtract(from).Days > startEndSpan)
        {
            dateTimes.Add(from, from.AddDays(startEndSpan));

            from = from.AddDays(startEndSpan + 1);
        }

        return dateTimes;
    }
// DateTime(2012, 2, 1) corresponds to Year 2012, Month February, Day 1
Dictionary<DateTime, DateTime> dateTimes = GetWeeklyDateTimes(new DateTime(2012, 2, 1), new DateTime(2012, 2, 29), DayOfWeek.Monday, DayOfWeek.Sunday);

foreach (KeyValuePair<DateTime, DateTime> entry in dateTimes)
{
    Trace.WriteLine(entry.Key.ToString() + "     " + entry.Value.ToString());
}
公共字典GetWeeklyDateTimes(DateTime from、DateTime to、DayOfWeek startDay、DayOfWeek endDay)
{
int startEndSpan=7-结束日-开始日;
//减去天数,直到它落在我们想要的开始日期
from=from.AddDays(startDay-from.DayOfWeek);
//增加天数,直到达到我们想要的结束日期
to=to.AddDays(to.DayOfWeek-endDay+2);
字典日期时间=新字典();
while(to.Subtract(from).Days>startEndSpan)
{
dateTimes.Add(from,from.AddDays(startEndSpan));
from=from.AddDays(startEndSpan+1);
}
返回日期时间;
}
用法示例:

public Dictionary<DateTime, DateTime> GetWeeklyDateTimes(DateTime from, DateTime to, DayOfWeek startDay, DayOfWeek endDay)
    {
        int startEndSpan = 7 - endDay - startDay;

        // Subtract days until it falls on our desired start day
        from = from.AddDays(startDay - from.DayOfWeek);
        // Add days until it falls on our desired end day
        to = to.AddDays(to.DayOfWeek - endDay + 2);

        Dictionary<DateTime, DateTime> dateTimes = new Dictionary<DateTime, DateTime>();

        while (to.Subtract(from).Days > startEndSpan)
        {
            dateTimes.Add(from, from.AddDays(startEndSpan));

            from = from.AddDays(startEndSpan + 1);
        }

        return dateTimes;
    }
// DateTime(2012, 2, 1) corresponds to Year 2012, Month February, Day 1
Dictionary<DateTime, DateTime> dateTimes = GetWeeklyDateTimes(new DateTime(2012, 2, 1), new DateTime(2012, 2, 29), DayOfWeek.Monday, DayOfWeek.Sunday);

foreach (KeyValuePair<DateTime, DateTime> entry in dateTimes)
{
    Trace.WriteLine(entry.Key.ToString() + "     " + entry.Value.ToString());
}
//日期时间(2012,2,1)对应于2012年2月1日
Dictionary dateTimes=GetWeeklyDateTimes(新日期时间(2012,2,1),新日期时间(2012,2,29),DayOfWeek.Monday,DayOfWeek.Sunday);
foreach(dateTimes中的KeyValuePair条目)
{
Trace.WriteLine(entry.Key.ToString()+“”+entry.Value.ToString());
}

使用标准的.net库有什么好处?我现在不能使用第三方dll。Cheers@overule:如我所说-是的,但您需要找到代码来计算一周中的相关日期。将进行编辑。我的解决方案不考虑开始日期。考虑到示例中的开始日期不是星期一,我认为确定这是工作的一部分。