Novidades do .NET 9: melhorias no tipo TimeSpan

Renato Groffe
2 min readJun 3, 2024

O tipo TimeSpan é empregado comumente na plataforma .NET para definir intervalos de tempo, contando com diversas opções de métodos (iniciados por From) para produzir essas representações. Implementações como FromDays, FromHours, FromMinutes, FromSeconds, FromMilliseconds e FromMicroseconds recebem como parâmetro um valor do tipo double, gerando assim uma representação de tempo correspondente.

A utilização de valores double pode, no entanto, resultar em problemas de precisão ao trabalharmos com intervalos de tempo. Devemos lembrar que double é um tipo numérico de ponto flutuante, com a execução do código a seguir produzindo alguns resultados imprecisos:

Intervalos de tempo em segundos como 71.716, 71.829 e 71.832 exemplificam bem isso - conforme observamos em Tempo em segundos (TimeSpan):

Tempo em segundos = 71.715
Tempo em segundos (double) = 71,715
Tempo em segundos (TimeSpan) = 00:01:11.7150000 | TimeSpan.FromSeconds(value)

Tempo em segundos = 71.716
Tempo em segundos (double) = 71,716
Tempo em segundos (TimeSpan) = 00:01:11.7159999 | TimeSpan.FromSeconds(value)

Tempo em segundos = 71.829
Tempo em segundos (double) = 71,829
Tempo em segundos (TimeSpan) = 00:01:11.8289999 | TimeSpan.FromSeconds(value)

Tempo em segundos = 71.830
Tempo em segundos (double) = 71,83
Tempo em segundos (TimeSpan) = 00:01:11.8300000 | TimeSpan.FromSeconds(value)

Tempo em segundos = 71.832
Tempo em segundos (double) = 71,832
Tempo em segundos (TimeSpan) = 00:01:11.8319999 | TimeSpan.FromSeconds(value)

Buscando evitar inconsistências decorrentes do uso de double, o .NET 9 traz novas sobrecargas com parâmetros baseados em tipos inteiros para os métodos FromDays, FromHours, FromMinutes, FromSeconds, FromMilliseconds e FromMicroseconds.

Na próxima listagem temos a geração de instâncias de TimeSpan utilizando a nova sobrecarga de FromSeconds, que conta com parâmetros do tipo long para gerar uma nova representação de intervalo (linhas 25 e 26):

Ao executar esta aplicação de testes:

Clique nesta imagem para visualizar com uma melhor resolução

Podemos notar que as inconsistências não mais ocorreram ao invocar a nova sobrecarga do método FromSeconds em TimeSpan:

Clique nesta imagem para visualizar com uma melhor resolução

Essa aplicação foi disponibilizada no GitHub:

https://github.com/renatogroffe/DotNet9-ConsoleApp-TimeSpan

Caso achem útil esta solução, peço por favor um ⭐️ no repositório apoiando. Fica também o convite para que vocês me sigam lá no GitHub!

Sign up to discover human stories that deepen your understanding of the world.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Docker Captain, Multi-Plataform Technical Audience Contributor (MTAC), Technical Writer and Speaker

No responses yet

Write a response