实现“部分日期”对象
我们需要一个“ 部分日期 ”对象,它允许您指定日期,例如
new PartialDate(1, null, null); // first of the month new PartialDate(1, 2, null); // first of the February new PartialDate(null, 2, null); // February
用例与事件有关。 例如,您可能每年1月都有一个课程,在这种情况下,您不希望或不需要指定日期对象的年份组件。
我们需要能够根据一些任意规则对这些日期进行排序,因此我想实现一种数据类型(它将实现IComparable
,但这不在我的问题范围内)。
我有一些问题:
- 这是一个坏主意吗?
- 我在.NET工作,是否有部分框架(或第三方库)将提供此function?
类本身非常简单,只有三个可为空的整数用于日期组件。 (如果您想了解如何正确实现结构,您甚至可以将其作为结构。)
使它有点复杂的是处理特殊情况,例如:
new PartialDate(29, 2, null); // occurs only on leap years new PartialDate(31, null, null); // occurs only seven months in a year
(另外,看看DateTime
结构中使用的参数顺序year,month,day
,您可能希望复制该模式而不是发明新模式。)
单个类的替代方法可以是基类,其具有针对单独日期的特定实现:
new MonthlyPartialDate(1); // the first every month new YearlyParticalDate(2, 1); // the first of february new YearlyPartialDate(2); // february
我对这个项目的未来有些担忧。 用户有一种需要更多function的恶劣趋势,并且在这种设计中存在一些主要问题。
首先,没有数星期和星期几的支持。 人们可能会认为,一旦你有了年,月和日,就可以很容易地添加周和工作日。 但它一点也不简单! 日期组件的各个子集之间的交互将非常复杂。
其次,任意排序要求将很快变得非常复杂。 如何排序以下内容?
- 2008年。
- 三月的第二天。
- 每个月的第一天。
没有明显的理由在任何其他人之前或之后提出任何这些。
我没有看到任何重大问题,但我不确定这是最好的方法。 如果每周一发生什么事怎么办? 您无法使用PartialDate表达此信息。 其他类型的时间表也可能很难。
另一种方法是使用像YearlySchedule,MonthlySchedule,WeeklySchedule,OneTimeSchedule这样的类,以及某些方法来组合和排除它们。
我从谷歌搜索中找到的另一个选项是灵活时间表 ,它使用谓词来指定日期。
您可以从DevExpress查看Scheduler控件 。
无论如何,在我们的应用程序中,我们没有使用它,因为我们确实需要更精细的粒度,并且不需要用于UI表示的日历。 我们所做的是创建一个基本的Interval接口,其中包含一个基于最后一个调度程序运行计算下一个日期的方法,并为MontlyInterval,WeeklyInterval等创建了一些类,实现了该接口。
我使用了部分日期作为存储机制:
就像是
Structure PartialDate Public Month As Byte '0 = null Public Day as Byte '0 = null Public Year As Integer '0 = null (there is no 0 year) End Structure
我从未试图定义可比较的全部色域(null年不是很有用)。
上述就是C#学习教程:实现“部分日期”对象分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949364.html