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ê".