SToD

Converte string AAAAMMDD em Date. Inverso direto de DToS. Padrao pra trabalhar com queries SQL e formatos sem ambiguidade entre US/BR.

Assinatura: SToD(cAAAAMMDD) -> dData

Retorna: Date

SToD (String To Date) converte string no formato fixo AAAAMMDD (8 chars, sem separadores) em Date AdvPL. E o conversor preferido em queries SQL e comparacoes — formato AAAAMMDD nao tem ambiguidade entre DD/MM e MM/DD.

Sintaxe

SToD(cAAAAMMDD) --> dData
// cAAAAMMDD = 8 chars exatos: AAAA + MM + DD

Exemplos

SToD("20260513")         // 13/05/2026
SToD("19851231")         // 31/12/1985
SToD("20240229")         // 29/02/2024 (bissexto)
SToD("")                 // data vazia
SToD("20261332")         // comportamento indefinido (mes 13?)

Comparacao com CtoD

FuncaoFormatoQuando usar
SToDAAAAMMDD fixoSQL queries, comparacoes, formato interno do Protheus
CtoDConforme SET DATE (geralmente DD/MM/AAAA)Input do usuario, telas

Caso pratico classico: query SQL com data

// Buscar titulos vencidos
cQry := "SELECT * FROM " + RetSqlName("SE1") + ;
        " WHERE E1_VENCREAL <= '" + DToS(dDataBase) + "'" + ;
        "   AND E1_BAIXA = ' '" + ;
        "   AND D_E_L_E_T_ = ' '"

TCQuery cQry New Alias "QRY"
While !QRY->(Eof())
    dVencto := SToD(QRY->E1_VENCREAL)   // SQL retorna AAAAMMDD
    nDias   := dDataBase - dVencto
    ConOut("Titulo " + QRY->E1_NUM + " com " + cValToChar(nDias) + " dias atrasado")
    QRY->(DBSkip())
EndDo

Caso pratico: ler arquivo CSV com data em formato fixo

// CSV com campo data no formato AAAAMMDD (sem separador)
cLinha := "001;PRODUTO A;20260513"
aCampos := Separa(cLinha, ";")
cCod    := aCampos[1]
cDesc   := aCampos[2]
dData   := SToD(aCampos[3])    // 13/05/2026

Pegadinhas

Truque util: validar formato

Static Function _VldData(cTxt)
    If Len(cTxt) != 8
        Return .F.
    EndIf
    Local d := SToD(cTxt)
Return !Empty(d)

Parâmetros

NomeTipoObrigatórioDescrição
cAAAAMMDDCharactersimString 8 chars no formato AAAAMMDD.

Veja também