我有一个开始时间跨度和一个结束时间跨度,但我无法弄清楚如何获取实际值。
TempoTotalParagem = DateTime.Now.TimeOfDay - paragem.HoraInico;
好吧,这一直工作到午夜。
我搜索了这个问题,我需要添加一天。
所以我尝试了
TempoTotalParagem = DateTime.Now.TimeOfDay - paragem.HoraInico + DateTime.Now.AddDays(1).TimeOfDay;
paragem.Hora Inicio = 23:14:00
DateTime.Now.TimeOfDay = 01:38
这给了
TempoTotalParagem = DateTime.Now.TimeOfDay - paragem.HoraInico + DateTime.Now.AddDays(1).TimeOfDay;
TempoTotalParagem = -19:55:59
我尝试更改日期时间的变量,但这有点复杂,因为在数据库中,列已经是带有数据的时间跨度。目的是计算自开始日期以来总时间列的时间
编辑
{
[Table("hParagensRegistos")]
public class ParagemRegisto
{
public int Id { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm:ss}")]
public TimeSpan HoraInico { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm:ss}")]
public TimeSpan? HoraFim { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:HH:mm:ss}")]
public TimeSpan? TempoTotal { get; set; }
public int RegistoId { get; set; }
public Registo Registo {get;set;}
public int? ParagemPlaneadaId { get; set; }
public ParagemPlaneada ParagemPlaneada { get; set; }
public int? ParagemNaoPlaneadaId { get; set; }
public ParagemNaoPlaneada ParagemNaoPlaneada { get; set; }
}
}
为避免混淆,这里是实际模态与时间跨度属性。
startTime = HoraInico
开始时间和结束时间还应包含日期部分。如果在获得差异时包括此内容,则结果应该是准确的。
例如:
// startTime is Midnight (which is technically the next day at time 0:00:00)
var startTime = DateTime.Today.AddDays(1);
// endTime is 11:59pm tomorrow
var endTime = DateTime.Today.AddDays(1).AddHours(23).AddMinutes(59);
// Just subtract the values to get the difference
var timeLeft = endTime - startTime;
// timeLeft is 23:59
这里需要考虑的一些事项:
- 所有
DateTime
对象都有Date
和Time
部分。 someDateTime.Date
(或DateTime.Today
)返回时间清零(午夜)的Date
部分。someDateTime.TimeOfDay
返回一个TimeSpan
,该表示自午夜以来经过的时间,并且根本不包括Date
。
因此,如果您只是比较时间,而不考虑Date
,那么您获得的输出是绝对正确的。但是,如果您比较完整的DateTime
对象,您将获得一个准确反映两者之间小时/分钟/秒的完整TimeSpan
。
不要使用TimeSpan
。
程序启动时:
paragem.HoraInico = DateTime.Now; // Declare as DateTime not TimeSpan
然后当你需要检查时:
TempoTotalParagem = DateTime.Now - paragem.HoraInico; // Difference of DateTimes is TimeSpan