按月表示日期

时间:2013-10-02 00:19:03

标签: .net enums bitwise-operators

我希望能够在本月的日子里得到一个标志枚举。

目前我已经找到了很多年份或星期几的例子,它们基于枚举:short并使用十六进制格式来指定项目的值。

但是我认为短期是31天+最后一天的选择。我认为一个int会做,但我不知道如何实现它并允许按位操作发生。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

我想我已经在这里解决了以下问题:

/// <summary>
/// Values for days of the month (1, 2, etc., Last Day)  These carry the Flags
/// attribute so DaysOfTheMonth and be combined with | (or).
/// </summary>
[Flags]
public enum DaysOfTheMonth : uint
{
    Day01 = 0x1,
    Day02 = 0x2,
    Day03 = 0x4,
    Day04 = 0x8,
    Day05 = 0x10,
    Day06 = 0x20,
    Day07 = 0x40,
    Day08 = 0x80,
    Day09 = 0x100,
    Day10 = 0x200,
    Day11 = 0x400,
    Day12 = 0x800,
    Day13 = 0x1000,
    Day14 = 0x2000,
    Day15 = 0x4000,
    Day16 = 0x8000,
    Day17 = 0x10000,
    Day18 = 0x20000,
    Day19 = 0x40000,
    Day20 = 0x80000,
    Day21 = 0x100000,
    Day22 = 0x200000,
    Day23 = 0x400000,
    Day24 = 0x800000,
    Day25 = 0x1000000,
    Day26 = 0x2000000,
    Day27 = 0x4000000,
    Day28 = 0x8000000,
    Day29 = 0x10000000,
    Day30 = 0x20000000,
    Day31 = 0x40000000,
    DayLast = 0x80000000
}

答案 1 :(得分:0)

您不需要枚举,您可以使用4字节整数来存储该值,并与表示为整数的天数进行比较,这可能更方便。

在下面的代码中(使用C#),第31天(最左边的位),3和1被标记为已选中。我没有使用可用于特殊标志的最低位。您可以查看下面的代码,看看如果选择了一天如何阅读:

Int32 selected = Convert.ToInt32("10000000000000000000000000001010", 2);

for (int day = 1; day <= 31; day++)
{
    int dayMask = 1 << day;
    bool isSelected = (selected & dayMask) != 0;
}

要选择日期,您可以使用以下代码:

Int32 toSelect = 0;

// select day 1
toSelect = toSelect | (1 << 1);

// select day 3
toSelect = toSelect | (1 << 3);

// select day 31
toSelect = toSelect | (1 << 31);