C# 一个月的第一周最优雅的表现方式是什么

C# 一个月的第一周最优雅的表现方式是什么,c#,date,html-table,C#,Date,Html Table,在C#中,我想显示日历中的第一周(在html表中),我正在尝试找出最优雅的算法来生成正确的日期 如果一周的第一天不是星期天,我想显示上个月的几天(就像你在常规日历上看到的那样)。因此,作为输入,您有一个当前月份。在这种情况下,我们可以。我想生成以下内容: 月份:五月 <table> <tr> <th>S</th> <th>M</th> <th>T</th> <th&g

在C#中,我想显示日历中的第一周(在html表中),我正在尝试找出最优雅的算法来生成正确的日期

如果一周的第一天不是星期天,我想显示上个月的几天(就像你在常规日历上看到的那样)。因此,作为输入,您有一个当前月份。在这种情况下,我们可以。我想生成以下内容:

月份:五月

 <table>
 <tr>
   <th>S</th>
   <th>M</th>
   <th>T</th>
   <th>W</th>
   <th>TH</th>
   <th>F</th>
   <th>Sa</th>
 </tr>
 <tr>
   <td>25</td>
   <td>26</td>
   <td>27</td>
   <td>28</td>
   <td>29</td>
   <td>30</td>
   <td>1</td>
 </tr></table>

s
M
T
W
真实航向
F
Sa
25
26
27
28
29
30
1.
因此,它应该显示如下内容(忽略对齐)

S | M | T | W | Th | F | Sa |
25-26-27-28-29-30-1

考虑到每个月的开始日期都是一周中不同的一天,我试图找到一种优雅的方法,使用DateTime对象获取这些数据的值。我看到它有一个dayofweek属性


我正在服务器上用C#生成这个表,以传递到html页面。

这里有一个简单的方法

    //Code not tested thoroughly.
    private DateTime[] GetWeek(int month)
    {
        DateTime firstDayofMonth = new DateTime(DateTime.Now.Year, month, 1);
        if (firstDayofMonth.DayOfWeek == DayOfWeek.Sunday)
            return GetWeek(firstDayofMonth);
        else
        {
            DateTime sundayOfPreviousMonth = firstDayofMonth;
            do
            {
                sundayOfPreviousMonth = sundayOfPreviousMonth.AddDays(-1);
            } while (sundayOfPreviousMonth.DayOfWeek != DayOfWeek.Sunday);
            return GetWeek(sundayOfPreviousMonth);
        }
    }

    private DateTime[] GetWeek(DateTime date)
    {
        if (date.DayOfWeek != DayOfWeek.Sunday)
            throw new ArgumentException("Invalid weekday.");
        DateTime[] week = new DateTime[7];
        for (int i = 0; i < week.Length; i++)
        {
            week[i] = date.AddDays(i);
        }
        return week;
    }
//代码没有经过彻底测试。
私有日期时间[]GetWeek(整数月)
{
DateTime firstDayofMonth=新的日期时间(DateTime.Now.Year,month,1);
if(firstDayofMonth.DayOfWeek==DayOfWeek.Sunday)
返回GetWeek(每月的第一天);
其他的
{
DateTime sundayOfPreviousMonth=每月的第一天;
做
{
sundayOfPreviousMonth=sundayOfPreviousMonth.AddDays(-1);
}而(sundayOfPreviousMonth.DayOfWeek!=DayOfWeek.Sunday);
返回GetWeek(上个月的星期日);
}
}
私有日期时间[]GetWeek(日期时间日期)
{
如果(date.DayOfWeek!=DayOfWeek.Sunday)
抛出新ArgumentException(“无效的工作日”);
DateTime[]周=新的日期时间[7];
for(int i=0;i
这里有一个简单的方法

    //Code not tested thoroughly.
    private DateTime[] GetWeek(int month)
    {
        DateTime firstDayofMonth = new DateTime(DateTime.Now.Year, month, 1);
        if (firstDayofMonth.DayOfWeek == DayOfWeek.Sunday)
            return GetWeek(firstDayofMonth);
        else
        {
            DateTime sundayOfPreviousMonth = firstDayofMonth;
            do
            {
                sundayOfPreviousMonth = sundayOfPreviousMonth.AddDays(-1);
            } while (sundayOfPreviousMonth.DayOfWeek != DayOfWeek.Sunday);
            return GetWeek(sundayOfPreviousMonth);
        }
    }

    private DateTime[] GetWeek(DateTime date)
    {
        if (date.DayOfWeek != DayOfWeek.Sunday)
            throw new ArgumentException("Invalid weekday.");
        DateTime[] week = new DateTime[7];
        for (int i = 0; i < week.Length; i++)
        {
            week[i] = date.AddDays(i);
        }
        return week;
    }
//代码没有经过彻底测试。
私有日期时间[]GetWeek(整数月)
{
DateTime firstDayofMonth=新的日期时间(DateTime.Now.Year,month,1);
if(firstDayofMonth.DayOfWeek==DayOfWeek.Sunday)
返回GetWeek(每月的第一天);
其他的
{
DateTime sundayOfPreviousMonth=每月的第一天;
做
{
sundayOfPreviousMonth=sundayOfPreviousMonth.AddDays(-1);
}而(sundayOfPreviousMonth.DayOfWeek!=DayOfWeek.Sunday);
返回GetWeek(上个月的星期日);
}
}
私有日期时间[]GetWeek(日期时间日期)
{
如果(date.DayOfWeek!=DayOfWeek.Sunday)
抛出新ArgumentException(“无效的工作日”);
DateTime[]周=新的日期时间[7];
for(int i=0;i
您可以使用以下代码获得第一周:

public static IEnumerable<DateTime> GetFirstWeek(int year, int month) {
    DateTime firstDay = new DateTime(year, month, 1);
    firstDay = firstDay.AddDays(-(int) firstDay.DayOfWeek);
    for (int i = 0; i < 7; ++i)
        yield return firstDay.AddDays(i);
}
公共静态IEnumerable GetFirstWeek(整数年,整数月){
DateTime firstDay=新日期时间(年、月、1);
firstDay=firstDay.AddDays(-(int)firstDay.DayOfWeek);
对于(int i=0;i<7;++i)
第一天收益率回报率。增加天数(i);
}

您可以使用以下代码获得第一周:

public static IEnumerable<DateTime> GetFirstWeek(int year, int month) {
    DateTime firstDay = new DateTime(year, month, 1);
    firstDay = firstDay.AddDays(-(int) firstDay.DayOfWeek);
    for (int i = 0; i < 7; ++i)
        yield return firstDay.AddDays(i);
}
公共静态IEnumerable GetFirstWeek(整数年,整数月){
DateTime firstDay=新日期时间(年、月、1);
firstDay=firstDay.AddDays(-(int)firstDay.DayOfWeek);
对于(int i=0;i<7;++i)
第一天收益率回报率。增加天数(i);
}
公共静态IEnumerable GetFirstWeek(整数月,整数年)
{
var firstDay=新日期时间(年、月、1);
var dayOfWeek=firstDay.dayOfWeek;
var firstWeekDay=firstDay.AddDays(-(int)dayOfWeek);
对于(int i=0;i<7;i++)
{
收益率返回第一个工作日。增加日(i);
}
}
公共静态IEnumerable GetFirstWeek(整数月,整数年)
{
var firstDay=新日期时间(年、月、1);
var dayOfWeek=firstDay.dayOfWeek;
var firstWeekDay=firstDay.AddDays(-(int)dayOfWeek);
对于(int i=0;i<7;i++)
{
收益率返回第一个工作日。增加日(i);
}
}
检查此代码:

var days = new[]
{
    "S", "M", "T", "W", "TH", "F", "Sa"
};
var date = DateTime.Parse( "01.05.2010" );
var dayOfWeek = (int)date.DayOfWeek;

for( var i = 0; i < 7; i++ )
{
    Console.WriteLine( days[i] + ": " + date.AddDays( i - dayOfWeek ) );
}
var-days=new[]
{
“S”、“M”、“T”、“W”、“TH”、“F”、“Sa”
};
var date=DateTime.Parse(“01.05.2010”);
var dayOfWeek=(int)date.dayOfWeek;
对于(变量i=0;i<7;i++)
{
Console.WriteLine(days[i]+“:“+date.AddDays(i-dayOfWeek));
}
这只是给你一个想法的代码——例如,你应该使用CultureInfo来解析你的日期。我现在使用任何日期作为输入,但您也可以将其缩减到每个月的第一天。

检查以下代码:

var days = new[]
{
    "S", "M", "T", "W", "TH", "F", "Sa"
};
var date = DateTime.Parse( "01.05.2010" );
var dayOfWeek = (int)date.DayOfWeek;

for( var i = 0; i < 7; i++ )
{
    Console.WriteLine( days[i] + ": " + date.AddDays( i - dayOfWeek ) );
}
var-days=new[]
{
“S”、“M”、“T”、“W”、“TH”、“F”、“Sa”
};
var date=DateTime.Parse(“01.05.2010”);
var dayOfWeek=(int)date.dayOfWeek;
对于(变量i=0;i<7;i++)
{
Console.WriteLine(days[i]+“:“+date.AddDays(i-dayOfWeek));
}
这只是给你一个想法的代码——例如,你应该使用CultureInfo来解析你的日期。我现在使用任何日期作为输入,但您也可以将其缩减到每个月的第一天。

这应该可以:

DateTime date = new DateTime(year, month, 1);
DayOfWeek firstDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
int daysBack = (7 + date.DayOfWeek - firstDay) % 7;

Enumerable.Range(-daysBack, 7)
    .Select(x => date.AddDays(x))
    .ToList()
    .ForEach(d => 
    {
        // a place for html generation
    });
这应该起作用:

DateTime date = new DateTime(year, month, 1);
DayOfWeek firstDay = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;
int daysBack = (7 + date.DayOfWeek - firstDay) % 7;

Enumerable.Range(-daysBack, 7)
    .Select(x => date.AddDays(x))
    .ToList()
    .ForEach(d => 
    {
        // a place for html generation
    });

你以46秒的优势击败了我+1如果一周从周一开始呢?您将获得
25,26,27,28,29,30,1
,但实际上本周从4月26日星期一开始。这取决于您使用的系统。西方的一个认为星期天是一周的开始。如果你想从周一开始,只需在第一天的基础上增加一天variable@AZ:我原以为(整个)欧洲的一周从周一开始,但由于您来自罗马尼亚…@AZ,例如,一周从周一开始,
-(int)firstDay.DayOfWeek
给出
0
(星期日);加上一天就可以得到
1
instea