2

如何将 1 到 7 之间的数字转换为 C# 中代表星期几的 DateTime 对象?这些数字来自我正在解析的 XML 文件。我正在检索包含 1 到 7 之间数字的字段的每个实例,该数字代表星期天和星期六之间的一周中的一天。

4

4 回答 4

3

我会假设投射到 DayOfWeek 对象会给你一周中的一天

DayOfWeek day = (DayOfWeek)myInt;

就 DateTime 对象而言,该对象表示特定的一天,不一定是一周中的随机一天。如果这是您想要实现的目标,您可以尝试将 # 天添加到特定日期。

http://msdn.microsoft.com/en-us/library/system.dayofweek.aspx

于 2009-04-20T18:02:21.630 回答
1

为了获得 a DateTime,您需要一个特定的日期范围,您希望工作日属于该日期范围(因为 aDateTime是特定的日期和时间,而工作日不是)。

有一个DayOfWeek枚举(其值实际上在 0-6 之间)。如果您只需要一些东西来代表一周中的哪一天,那么您应该能够将您的 int 转换为DayOfWeeklike..

DayOfWeek myDay = (DayOfWeek)yourInt;

如果你需要一个实际的DateTime,你需要一个开始日期。那你可以做...

DateTime myDate = startDate.AddDays(
    (int)startDate.DayOfWeek >= yourInt ? 
        (int)startDate.DayOfWeek - yourInt : 
        (int)startDate.DayOfWeek - yourInt + 7);

这将为您提供您所描述的星期几的下一个发生实例的 DateTime。

于 2009-04-20T17:57:59.440 回答
1

一个DateTime实例总是代表一个完整的日期,而不能只代表一周中的一天。如果实际日期无关紧要,则取任意一个星期一(假设 0 代表星期一),然后加上当天的数字。

Int32 dayOfWeek = 3;

// date represents a thursday since 2009/04/20 is a monday
DateTime date = new DateTime(2009, 04, 20).AddDays(dayOfWeek);

否则,我同意 Adam Robinson 的回答 - 如果您只想保留一周中的某一天,请坚持使用DayOfWeek 枚举(零是星期日)而不是使用整数。

于 2009-04-20T17:58:57.470 回答
1

DayOfWeek.Sunday 为零,因此您可以从已知为星期日的任意固定日期开始,并添加一个介于 0 和 6 之间的值:

public DateTime GetDayOfWeek(int dayOfWeek)
{
    if (dayOfWeek < 0 || dayOfWeek > 6) throw new ArgumentOutOfRangeException(...);

    // 4 January 2009 was a Sunday
    return new DateTime(2009,1,4).AddDays(dayOfWeek);
}

我不确定你为什么想要这个。

如果您只希望它获得星期几的本地化版本,如下所示:

GetDayOfWeek(3).ToString("dddd"); // Gets name of day of week for current culture

另一种方法是使用 DateTimeFormatInfo.DayNames 或 DateTimeFormatInfo.AbbreviatedDayNames 作为您想要的文化。

于 2009-04-20T18:00:06.627 回答