Pergunta

Estes dois TimeSpan são armazenados no banco de dados com formato de 24 horas. No momento, apenas TimeSpan.

Dim r As TimeSpan
Dim tsStart As TimeSpan
Dim tsEnd As TimeSpan

'tsStard is 12:27:30 (pm) this happened first
'tsEnd is 00:10:25 (am) then this happened later

'You can't store 24:10:25 in the column type Time(7)

r = tsEnd.Subtract(tsStart)

'O r = -12: 17: 05

Existe algum método TimeSpan para obter este direito? Obrigado.

Foi útil?

Solução

Se você sabe que tsEnd sempre representa um ponto posterior no tempo de tsStart mas seu banco de dados não armazena as datas, você pode resolver isso adicionando 24 horas para o fim quando o fim é menor do que o início (perdão a C # sintaxe):

if (tsEnd < tsStart) {
    r = tsEnd.Add(new TimeSpan(24, 0, 0)).Subtract(tsStart);
} else {
    r = tsEnd.Subtract(tsStart);
}

Como jball observado nos comentários, isso pressupõe que tsEnd é nunca mais tarde por mais de um dia, embora nós não temos nenhuma maneira de determinar o contrário.

Outras dicas

Se você usar o método Duração () no TimeSpan, ele irá garantir que o seu resultado é positivo, não importa que ordem você faz a subtração na.

Por exemplo:

Dim r As TimeSpan
Dim tsStart As TimeSpan
Dim tsEnd As TimeSpan

'tsStart is 12:27:30 
'tsEnd is 00:10:25 

r = tsEnd.Subtract(tsStart).Duration()
'r = 12:17:05

tsEnd é inferior a tsStart, então r = tsEnd.Subtract(tsStart) deve resultar em um número negativo. Talvez você quer subtrair tsEnd de tsStart r = tsStart.Subtract(tsEnd), ou suas variáveis ??estão sendo definidas para o inverso do que deveriam ser?

Dependendo da sua situação, você pode querer chamar r = r.Duration(), que retorna o valor absoluto da r.

Se você está preocupado com dias de acondicionamento, você vai precisar a data -. Não há nenhuma maneira de saber quantos dias se passaram apenas a partir do componente de tempo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top