Avatar ·

DateTime vs DateTimeOffset em C#: qual tipo escolher para trabalhar com datas e fusos horários?

Olá, colegas! Sou novo em C# e .NET, e fiquei confuso com os tipos DateTime e DateTimeOffset. Ambos parecem ser para armazenar data e hora, mas por que existem dois tipos diferentes? Estou escrevendo um pequeno aplicativo para gerenciamento de tarefas. Os usuários podem criar tarefas e definir um prazo. É lógico armazenar a data e hora do prazo. Inicialmente, usei DateTime: ```csharp DateTime deadline = new DateTime(2025, 12, 31, 23, 59, 0); Console.WriteLine($"Prazo: {deadline}"); ``` Mas depois percebi que, se o usuário estiver em Moscou e o servidor estiver em UTC, a hora pode ser exibida incorretamente. Tentei usar a propriedade `.Kind` (Local, Utc, Unspecified), mas isso só aumentou a confusão. No final, encontrei o DateTimeOffset. Parece que ele também armazena o offset do UTC. Mas quando usá-lo? Existem situações em que DateTime é preferível? E como converter corretamente entre eles? Ficarei grato por uma explicação detalhada com exemplos. Quero entender não apenas "como", mas também "por quê".