De fato lidar corretamente com datas é bem mais complicado do que a maioria das pessoas acha que é - talvez por isso seja tão difícil elas sequer imaginarem o tipo de problemas que podem acontecer, quanto mais as formas de resolver. É verdade também que muitas API's de data existentes não ajudam, o que torna ainda mais importante estudar bem o assunto.
Sobre a solução de somar o offset, existem muitas ressalvas e tem que usar com cautela, pois dependendo do caso pode causar mais problemas ainda. Como estou sem tempo de elaborar um post mais completo, vou deixar alguns links onde eu explico com mais detalhes os poréns desta solução, e vários outros pontos de atenção:
- Como mostrar o objeto Date com o timezone que ele foi criado em JavaScript?
- Como formatar data no formato ISO 8601 mantendo o fuso horário do browser?
- Como obter a data do sistema em JavaScript?
- Como resolver problema de acréscimo de 3 horas no atributo Date no Angular?
- etc :-)
Outro post que pode ajudar é Como trabalhar com timezones sem usar um timestamp?.
Sobre o uso de Date.parse
, também existem alguns poréns, porque browsers diferentes podem ou não aceitar formatos diversos, então não é garantido que a mesma string sempre gere a mesma data em todos os casos (por exemplo, "10/02/2020" pode resultar em 2 de outubro ou 10 de fevereiro, dependendo da implementação).
Só pra complementar o post, já escrevi algo a respeito aqui no site, em Lidando com datas em JavaScript (ou "criei uma data, mas mostra um dia a menos").
Também tem muito conteúdo do meu blog que planejo adaptar para o TabNews, mas enquanto isso não acontece, vc pode ver aqui uma lista dos posts relacionados ao tema .
E já que é pra fazer propaganda, este é um livro que escrevi sobre o assunto. Apesar do título (Datas e horas -
Conceitos fundamentais e as APIs do Java), não é só pra quem programa em Java, pois a primeira parte do livro é mais conceitual e vai servir para qualquer linguagem.