Questão nº 38
Questão de Análise de Sistemas · CESGRANRIO BNDES 01/2024 (nº 38)
Um desenvolvedor JavaScript está atualizando um código legado que utiliza a classe Date para manipulação de datas e horas. Ele precisa substituir o código antigo por uma implementação moderna utilizando a nova Temporal API, introduzida no ECMAScript 2023. O código original contém a seguinte linha para criar uma data correspondente a 15 de agosto de 2023:
`const minhaData = new Date(2023, 7, 15);`
Qual linha de código corresponde à criação dessa mesma data, usando a Temporal API?
- A`const minhaData = Temporal.Date.from({ year: 2023, month: 7, day: 15 });`
- B`const minhaData = Temporal.PlainDate.from({ year: 2023, month: 8, day: 15 });` (alternativa correta)
- C`const minhaData = new Temporal.PlainDate(15, 8, 2023);`
- D`const minhaData = new Date(2023, 8, 15);`
- E`const minhaData = Temporal.PlainDate(2023, 7, 15);`
Resposta comentada
Gabarito Alternativa B
Conceito-chave: A Temporal API separa data pura (sem fuso horário) de data-hora com fuso, e usa Temporal.PlainDate para representar apenas o calendário (ano, mês, dia). Diferente da Date antiga (que conta meses de 0 a 11), a Temporal conta meses de forma natural (1 a 12), então agosto = mês 8, não 7.
- (A) Incorreta:
Temporal.Datenão existe na API final (o nome correto éTemporal.PlainDate) e ainda usamonth: 7, que seria julho, não agosto. - (B) Correta:
Temporal.PlainDate.from({ year: 2023, month: 8, day: 15 })cria exatamente 15/08/2023, pois aTemporalusa meses de 1 a 12 (agosto = 8), eliminando a confusão do índice zero daDateantiga. - (C) Incorreta: A ordem dos argumentos no construtor
new Temporal.PlainDate(ano, mês, dia)está errada (colocou dia, mês, ano) e ainda passou8como mês, mas a ordem correta seria(2023, 8, 15). - (D) Incorreta: Usa a classe antiga
Date(não é aTemporal) emonth: 8naDateantiga corresponderia a setembro (pois lá janeiro é 0), criando 15/09/2023. - (E) Incorreta: Faltou o operador
new(ou o método.from()), e a ordem dos argumentos está trocada —Temporal.PlainDate(2023, 7, 15)nem é uma chamada válida semnew, e mesmo comnew,7seria julho.
Armadilha da banca (no distrator mais tentador, a letra A): A pegadinha está em Temporal.Date — parece lógico, mas a API real chama-se Temporal.PlainDate. Além disso, a banca repete o month: 7 do código original, tentando te fazer copiar o erro de indexação da Date antiga (onde 7 = agosto). Na Temporal, mês é natural: agosto é 8, não 7.
Fonte: CESGRANRIO BNDES 01/2024 Analista - Análise de Sistemas (Desenvolvimento) (Caderno Prova 3). Reproduzida para fins de estudo.