如何获取星期几的整数值

136

如何以整数格式获取一周中的日期?我知道 ToString 只会返回一个字符串。

DateTime ClockInfoFromSystem = DateTime.Now;
int day1;
string day2;
day1= ClockInfoFromSystem.DayOfWeek.ToString(); /// it is not working
day2= ClockInfoFromSystem.DayOfWeek.ToString(); /// it gives me string

@Joe,我无法重新格式化他的代码以将其放置在代码块中,为什么会这样? - uday
5
既然您调用了ToString(),那么您为什么不期望得到字符串呢? - Brian Rasmussen
@Dave,我不得不将它与问题文本分开成一行,否则它会缩进代码... - Joe
很酷!我试图将他的代码转换成代码块,但它不允许我这样做。 - uday
10个回答

211

使用

day1 = (int)ClockInfoFromSystem.DayOfWeek;

3
它会对应星期一返回0,依此类推吗? - akshaykumar6
12
开发者,星期天的表示为0。参考链接:http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx。 - Roy Goode
50
如果你希望星期一为0,只需改变日期的偏移量:day1 = (int)(ClockInfoFromSystem.DayOfWeek + 6) % 7 - Kevin Gosse
4
如果你想更快地完成它,可以查看这个链接:https://dev59.com/zmEh5IYBdhLWcg3wk0Oz#22278311 - rpax

107
int day = (int)DateTime.Now.DayOfWeek;

一周的第一天是星期日(值为零)


81

如果您想将一周的第一天设置为星期一,并使用整数值1表示星期一,整数值7表示星期日

int day = ((int)DateTime.Now.DayOfWeek == 0) ? 7 : (int)DateTime.Now.DayOfWeek;

14
所有理智的人都会点赞支持这个观点。ISO 8601 对此非常明确,周一是第一天,周日是第七天。 - Morvael
没有意识到 DayOfWeek 属性在星期天会返回零。差点按照最受欢迎的答案引入了一个 bug。谢谢! - brz

6
day1= (int)ClockInfoFromSystem.DayOfWeek;

@JustinSatyr - FiveTools 显然只是举了一个例子。这并不是他的错,而是作者试图将字符串值设置为整数变量的错误。 - Security Hound
@Ramhound:我没有点踩,也没有批评。我认为他误读了代码。而且根据他更正代码的事实,显然我的想法是正确的。 - Devin Burke

6

获取枚举类型(例如DayOfWeek)的整数值并将其作为字符串返回的正确方法是:

DayOfWeek.ToString("d")

4
这将返回一个“字符串”,而不是一个“整数”。 - Danny Beckett
这是月份的日期,不是星期的日期。 - Fritz
1
@Fritz 不是的,它是一个枚举整数“作为字符串”,就像我说的那样。你正在混淆日期格式化,但这不是。 - Rob Sedgwick

6

使用以下方法获取星期一的整数值为1,星期日的整数值为7

int day = ((int)DateTime.Now.DayOfWeek + 6) % 7 + 1;
请注意:以上内容为代码示例,不应进行解释或修改。

6

试试这个。它会很好地工作:

int week = Convert.ToInt32(currentDateTime.DayOfWeek);

2

正确答案确实是获取int值的正确答案。

但是,如果你只是想检查是否是星期日...考虑使用以下代码,而不是强制转换为int。这样可以提供更好的可读性。

if (yourDateTimeObject.DayOfWeek == DayOfWeek.Sunday)
{
    // You can easily see you're checking for sunday, and not just "0"
}

0

易读性很重要。

如果您需要一个整数:

int day1 = (int)ClockInfoFromSystem.DayOfWeek;

如果您需要一周中的整数字符串:
string daystr = $"{(int)ClockInfoFromSystem.DayOfWeek}"; // Unambiguous string of int.

不要使用推荐的ToString转换,因为大多数程序员都需要查找确认它是整数的字符串而不是月份的日期。真的吗,微软?

string daystr = ClockInfoFromSystem.DayOfWeek.ToString("d"); // Whaa? Horrible! Don't do this.

要更改一周的开始日期,需要加上距离星期日的天数模7。从星期日开始向后计算天数,例如:从星期日往前数1天是星期六,往前数2天是星期五,以此类推。

int satStart = (int)(ClockInfoFromSystem.DayOfWeek + 1) % 7; // Saturday start
int monStart = (int)(ClockInfoFromSystem.DayOfWeek + 6) % 7; // Monday start

0
DateTime currentDateTime = DateTime.Now;
int week = (int) currentDateTime.DayOfWeek;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接