Resumo : neste tutorial, você aprenderá como usar C# DateTimeOffset
para lidar com valores de data e hora com deslocamento de fuso horário.
Introdução ao tipo C# DateTimeOffset
C# DateTimeOffset
representa um valor de data e hora que consiste em dois componentes:
- O
DateTime
representa a data e a hora. - O
offset
representa a diferença entre a hora local e o UTC.
O offset
é expresso como o número de horas e minutos à frente ou atrás do UTC:
+HH:MM
Linguagem de código: CSS ( css )
Ou
-HH:MM
Linguagem de código: CSS ( css )
Por exemplo:
5/15/2023 10:46:09 AM -07:00
Neste DateTimeOffset
exemplo, o DateTime
componente é 5/15/2023 10:46:09 AM
e o componente de deslocamento é -07:00
.
Criando um valor DateTimeOffset
Para criar um DateTimeOffset
objeto, você usa o DateTimeOffset
construtor do e inicializa-o com um DateTime
valor e um deslocamento. Por exemplo:
using static System.Console;
var dateTimeOffset = new DateTimeOffset(
new DateTime(2023, 5, 15, 7, 0, 0),
new TimeSpan(-7, 0, 0)
);
WriteLine(dateTimeOffset);
Linguagem de código: C# ( cs )
Saída:
5/15/2023 7:00:00 AM -07:00
Linguagem de código: C# ( cs )
Neste exemplo, usamos TimeSpan
para criar um deslocamento para o DateTimeOffset
objeto.
Para obter a data e hora atuais com deslocamento de fuso horário, você pode usar a Now
propriedade:
using static System.Console;
WriteLine(DateTime.Now);
WriteLine(DateTimeOffset.Now);
Linguagem de código: CSS ( css )
Saída:
5/15/2023 10:46:09 AM
5/15/2023 10:46:09 AM -07:00
Acessando propriedades DateTimeOffset
O DateTimeOffset
tem muitas propriedades úteis, incluindo Year
, Month
, Day
, Hour
, Minute
e Second
, e Offset
:
using static System.Console;
var dateTimeOffset = new DateTimeOffset(
new DateTime(2023, 5, 15, 7, 0, 0),
new TimeSpan(-7, 0, 0)
);
// year, month, day, hour, minute, and second
WriteLine(dateTimeOffset.Year);
WriteLine(dateTimeOffset.Month);
WriteLine(dateTimeOffset.Day);
WriteLine(dateTimeOffset.Hour);
WriteLine(dateTimeOffset.Minute);
WriteLine(dateTimeOffset.Second);
// offset
WriteLine(dateTimeOffset.Offset);
Linguagem de código: JavaScript ( javascript )
Usando o DateTimeOffset para encontrar o fuso horário atual
O exemplo a seguir mostra como usar DateTimeOffset
e TimeZoneInfo
para localizar o fuso horário atual do sistema e exibi-los no console:
using static System.Console;
var time = DateTimeOffset.Now;
// find the timezone
foreach (var timezone in TimeZoneInfo.GetSystemTimeZones())
{
if (timezone.GetUtcOffset(time) == time.Offset)
{
WriteLine(timezone);
}
}
Linguagem de código: C# ( cs )
O programa mostra uma lista dos fusos horários atuais.
Como funciona:
- Defina uma variável
time
e inicialize-a naDateTimeOffset.Now
propriedade. Representatime
a data e hora atuais, incluindo o deslocamento do fuso horário. - Itere todos os fusos horários disponíveis no sistema usando o
GetSystemTimeZones
método. Dentro do loop, verifique se o deslocamento UTC do fuso horário atual é igual ao deslocamento do objeto de hora usando oGetUtcOffset()
método. - Se o deslocamento do fuso horário corresponder ao deslocamento do objeto de tempo, isso significa que o fuso horário atual é aquele que estamos procurando e o exibe no console.
Resumo
- Use o C#
DateTimeOffset
quando precisar trabalhar com fusos horários e representar o mesmo momento em vários fusos horários.