gpt4 book ai didi

c# - 只是日期或时间

转载 作者:行者123 更新时间:2023-11-30 13:25:02 25 4
gpt4 key购买 nike

我只是想知道..

我有这样的反对意见

public class Entry{

public DateTime? Date { get; set;} // This is just Date

public DateTime? StartTime { get; set; } //This is just Time

public TimeSpan Duration { get; set; } //Time spent on entry

}

是否有比 DateTime 更合适的类型或更好的策略来处理时间和日期?无需为所有开始时间和结束时间添加 DateTime.MinDate() 的痛苦?

---更新---

1 - 我希望能够在 Entry 对象上单独请求 Date 或 StartTime 是否为 Null。

2 - 条目应允许用户输入持续时间而不指示日期。即使是像 DateTime.MinDate() 这样的默认日期也似乎是一个糟糕的设计。 (这就是为什么我选择 TimeSpan 而不是 Start 和 EndTime)

最佳答案

不要拆分存储数据的日期和时间组件。如果你愿意,你可以提供属性来提取它们:

public class Entry {

public DateTime StartPoint { get; set; }
public TimeSpan Duration { get; set; }

public DateTime StartDate { get { return StartPoint.Date; } }
public TimeSpan StartTime { get { return StartPoint.TimeOfDay; } }
public DateTime EndPoint { get { return StartPoint + Duration; } }
public DateTime EndDate { get { return EndPoint.Date; } }
public TimeSpan EndTime { get { return EndPoint.TimeOfDay; } }

}

更新:
如果您想为日期和时间设置空值,您可以为其添加属性而无需拆分日期和时间:

public class Entry{

private DateTime _startPoint;

public bool HasStartDate { get; private set; }
public bool HasStartTime { get; private set; }
public TimeSpan Duration { get; private set; }

private void EnsureStartDate() {
if (!HasStartDate) throw new ApplicationException("Start date is null.");
}

private void EnsureStartTime() {
if (!HasStartTime) throw new ApplicationException("Start time is null.");
}

public DateTime StartPoint { get {
EnsureStartDate();
EnsureStartTime();
return _startPoint;
} }

public DateTime StartDate { get {
EnsureStartDate();
return _startPoint.Date;
} }

public TimeSpan StartTime { get {
EnsureStartTime();
return _startPoint.TimeOfDay;
} }

public DateTime EndPoint { get { return StartPoint + Duration; } }

public DateTime EndDate { get { return EndPoint.Date; } }

public TimeSpan EndTime { get { return EndPoint.TimeOfDay; } }

public Entry(DateTime startPoint, TimeSpan duration)
: this (startPoint, true, true, duration) {}

public Entry(TimeSpan duration)
: this(DateTime.MinValue, false, false, duration) {}

public Entry(DateTime startPoint, bool hasStartDate, bool hasStartTime, TimeSpan duration) {
_startPoint = startPoint;
HasStartDate = hasStartDate;
HasStartTime = hasStartTime;
Duration = duration;
}

}

关于c# - 只是日期或时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1340996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com