As cadeias de caracteres de entrada de data e hora são decodificadas usando o seguinte procedimento:
Divisão da cadeia de caracteres da entrada em tokens (elementos), e categorização de cada token como cadeia de caracteres de hora, zona horária ou número.
Se o token numérico contiver
dois pontos (:), esta é uma cadeia de
caracteres de hora.
Incluir todos os dígitos e dois pontos subsequentes.
Se o token numérico contiver
hífen (-), barra (/),
ou dois ou mais pontos (.), esta é uma
cadeia de caracteres de data, que pode ter um mês textual.
Se o token de data já tiver
sido lido, então será interpretado como sendo nome de
zona horária (por exemplo, America/New_York).
Se o token for apenas numérico,
será um campo único, ou uma data concatenada no formato
ISO 8601
(por exemplo, 19990113 para 13 de janeiro de 1999),
ou hora (por exemplo, 141516 para 14:15:16).
Se o token começar com o sinal
de mais (+), ou de menos (-),
então é uma zona horária numérica, ou um campo especial.
Se o token for uma cadeia de caracteres alfabética, corresponda com as cadeias de caracteres possíveis:
Veja se o token corresponde a qualquer abreviatura de zona horária conhecida. Estas abreviaturas são determinadas pelas configurações descritas em Arquivos de configuração de data e hora.
Se não for encontrado, procure na tabela interna para verificar
se o token é uma cadeia de
caracteres especial (por exemplo, today),
um dia (por exemplo, Thursday),
um mês (por exemplo, January),
ou uma palavra ruído (por exemplo, at, ou
on).
Se ainda assim não for encontrado, lance um erro.
Quando o token é um número, ou um campo numérico:
Havendo oito ou seis dígitos, e nenhum outro campo de data tiver
sido lido anteriormente, interprete como sendo uma
“data concatenada”
(por exemplo, 19990118 ou 990118).
A interpretação é YYYYMMDD ou
YYMMDD.
Se o token tiver três dígitos, e o ano já tiver sido lido, interprete como o dia do ano.
Se quatro ou seis dígitos e o ano já foram lidos, então
interprete como sendo uma hora (HHMM ou
HHMMSS).
Se três ou mais dígitos e nenhum campo de data ainda tiver sido
lido, interprete como sendo um ano
(isto força a ordem yy-mm-dd dos campos de
data restantes).
Caso contrário, presume-se que a ordem do campo de data siga a
definição de DateStyle:
mm-dd-yy, dd-mm-yy, ou
yy-mm-dd.
Lance um erro se o campo de mês ou dia estiver fora do
intervalo permitido.
Se foi especificado BC, negue o ano e adicione um para armazenamento interno. (Não há ano zero no calendário gregoriano, então numericamente 1 aC se torna o ano zero.)
Se não foi especificado BC, e se o campo do ano tiver dois dígitos, ajuste o ano para quatro dígitos. Se o campo for menor que 70, adicione 2000, caso contrário, adicione 1900.
Os anos gregorianos 1–99 AD podem ser inseridos usando
4 dígitos com zeros à esquerda (por exemplo,
0099 é AD 99).