我有一个开始时间跨度和一个结束时间跨度,我无法弄清楚如何获得实际值。
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
答案 0 :(得分:3)
开始时间和结束时间也应包含日期部分。如果在得到差异时将其包括在内,则结果应该是准确的。
例如:
// 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
,它可以准确反映两者之间的小时/分钟/秒的总数。
答案 1 :(得分:0)
请勿使用TimeSpan
。
程序启动时:
paragem.HoraInico = DateTime.Now; // Declare as DateTime not TimeSpan
然后当您需要检查时:
TempoTotalParagem = DateTime.Now - paragem.HoraInico; // Difference of DateTimes is TimeSpan