Tratamento de Fuso Horário
Parte da seção Lógica e Fluxo do Journey de Java da Coddy — lição 59 de 59.
ZonedDateTime no Java representa uma data e hora com um fuso horário. É útil ao trabalhar com diferentes fusos horários ou converter entre eles.
Crie uma data e hora em um fuso horário específico:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));Você também pode converter um LocalDateTime para um ZonedDateTime usando .atZone():
LocalDateTime local = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = local.atZone(ZoneId.of("Asia/Tokyo"));.atZone() anexa um fuso horário a uma data-hora local existente, produzindo um ZonedDateTime.
Converter horário entre fusos horários:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));Após executar o código acima, newYork contém o mesmo instante que tokyo, mas no fuso horário de Nova York:
2024-03-15T10:30-04:00[America/New_York]
// Example outputPara formatar um ZonedDateTime, use DateTimeFormatter. A letra do padrão Z ou xxx formata o deslocamento UTC (ex.: +09:00), e VV formata o ID da zona (ex.: Asia/Tokyo):
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = tokyo.format(formatter);
// Example: 2024-03-15 10:30 +09:00Desafio
FácilCrie um método chamado convertTime que recebe quatro argumentos:
- Uma String (
dateTimeStr) no formato "yyyy-MM-dd HH:mm" - Uma String (
sourceZone) ID da zona horária de origem - Uma String (
targetZone) ID da zona horária de destino - Um boolean (
showOffset) se deve incluir o offset da zona horária na saída
O método deve:
- Analisar a data e hora de entrada na zona horária de origem
- Converter para a zona horária de destino
- Retornar informações formatadas sobre ambos os horários
As mensagens de retorno devem ser:
- Se data/hora inválida: retornar "Invalid datetime format"
- Se zona inválida: retornar "Invalid time zone"
- Se showOffset for true: incluir offset na saída
- Formato: "Source: [time1], Target: [time2]"
Folha de consulta
ZonedDateTime representa uma data e hora com um fuso horário, útil para trabalhar com diferentes fusos horários.
Crie um horário em um fuso horário específico:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));Converta um LocalDateTime para um ZonedDateTime usando .atZone():
LocalDateTime local = LocalDateTime.now();
ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Tokyo"));Converta o horário entre fusos horários:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));Formate um ZonedDateTime incluindo o offset UTC usando padrões Z ou xxx:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String formatted = zoned.format(formatter);
// Example: 2024-03-15 10:30 +09:00Experimente você mesmo
import java.util.Scanner;
import java.time.*;
import java.time.format.*;
public class Main {
public static String convertTime(String dateTimeStr, String sourceZone,
String targetZone, boolean showOffset) {
// Escreva seu código aqui
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateTimeStr = scanner.nextLine();
String sourceZone = scanner.nextLine();
String targetZone = scanner.nextLine();
boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica e Fluxo
1Arrays Multidimensionais
Básicos de Arrays 2DAcessando Elementos de Arrays 2DLoops Aninhados com Arrays 2DResumo - Arrays 2DAdição e Subtração de MatrizesArrays EscalonadosArrays 3D e AlémPadrões Comuns de Arrays 2DResumo - Tudo Sobre Arrays4HashSet Parte 1
O que é um HashSet?Adicionando um ElementoRemovendo um ElementoVerificando se um Elemento ExisteVazio e TamanhoLimpar e ClonarResumo - HashSet10Data e Hora
Básicos do LocalDateOperações com LocalTimeUso do LocalDateTimePeriod e DurationFormatação de DataTratamento de Fuso Horário2HashMap Parte 1
O que é um HashMap?Declarar um HashMapAcessando ValoresVerificar se a Chave ExisteModificando DicionáriosResumo - HashMap3HashMap Parte 2
Métodos do HashMapIterar com keySet()Iterar com entrySet()HashMap AninhadoResumo - Gerenciar ArmazémResumo - Operações do HashMap6Fluxo de Controle Avançado
Declarações RotuladasExpressão SwitchCorrespondência de PadrõesCláusulas de GuardaResumo - Fluxo de Controle9Projeto - Contador de Palavras Únicas
Entrada e Armazenamento de TextoProcessamento de Palavras