我将一周的日期存储在数据库表中(我无法控制),我需要在我的代码中使用它。
问题是,我想使用System.DayOfWeek枚举来表示它,并且序列不一样。
在数据库中,它如下:
1 2 3 4 5 6 7
S M T W T F S
我需要如下:
0 1 2 3 4 5 6
M T W T F S S
最优雅的方法是什么?
例如,我可以这样做:
i = dayOfWeek;
i = i - 2;
if (i < 0) {
i = 6;
}
但这有点不优雅。有什么建议吗?
&LT;编辑&gt;
咳咳。显然(.net反射器说)DayOfWeek从星期日开始编号为索引。
在提出愚蠢问题之前,请务必阅读文档。
然而,我仍然对答案感兴趣,只是为了满足自己的好奇心,所以去吧。
&LT; /编辑&gt;
答案 0 :(得分:5)
您想要的值是
(DayOfWeek)((dbDay + 5) % 7)
使用模运算符%
。
答案 1 :(得分:3)
将其包裹在一个函数中:
public int DbToDayOfWeek(int dbDay)
{
if (dbDay == 1)
return 6;
return dbDay -2;
}
或者:
public DayOfWeek DbToDayOfWeek(int dbDay)
{
if (dbDay == 1)
return DayOfWeek.Sunday;
return (DayOfWeek)(dbDay - 2);
}
答案 2 :(得分:0)
虽然我无法想象值会发生变化,但您应该避免假设DayOfWeek枚举值保持不变 - 因此相应的代码。
static DayOfWeek[] _toDaysTable = new DayOfWeek[] {
DayOfWeek.Sunday, DayOfWeek.Monday, DayOfWeek.Tuesday, DayOfWeek.Wednesday,
DayOfWeek.Thursday, DayOfWeek.Friday, DayOfWeek.Saturday
};
static DayOfWeek ToDayOfWeek(int myDayOfWeek)
{
int index = myDayOfWeek - 1;
if (index < 0 || index >= _toDaysTable.Length)
throw new ArgumentOutOfRangeException("myDayOfWeek");
return _toDaysTable[index];
}
static int FromDayOfWeek(DayOfWeek day)
{
int index = Array.IndexOf(_toDaysTable, day);
if (index < 0)
throw new ArgumentOutOfRangeException("day");
return index + 1;
}
答案 3 :(得分:0)
您可以创建自己的枚举并将枚举直接映射到数据库中的值
public enum DayOfWeek
{
Mon = 2,
Tue = 3,
Wed = 4,
Thu = 5,
Fri = 6,
Sat = 7,
Sun = 1
}
然后,您可以使用DayOfWeek
类型的扩展方法来检索值:
public static int ToInt(this DayOfWeek dow)
{
return (int)dow;
}
除非您依靠DayOfWeek
与日期进行实际比较,否则您必须在偏移之间进行转换。