Campos de Data e Hora
Campos de Data e Hora
Este guia mostra como trabalhar com as classes de campo de data e hora sensíveis ao calendário em Aspose.Words FOSS para .NET — FieldDate, FieldCreateDate, FieldPrintDate, e FieldSaveDate — que implementam o Word DATE, CREATEDATE, PRINTDATE, e SAVEDATE campos, respectivamente. Cada classe deriva de Field e implementa IFieldWithCalendar; para o modelo base Field do modelo de objeto em si (atualizando, desvinculando, removendo e formatando qualquer campo), veja o Trabalhando com Campos guia.
As Quatro Classes de Campos de Data e Hora
FieldDate implementa o campo DATE. FieldCreateDate implementa CREATEDATE, a data em que o documento foi criado. FieldPrintDate implementa PRINTDATE, a data em que o documento foi impresso pela última vez. FieldSaveDate implementa SAVEDATE, a data em que o documento foi salvo pela última vez. Todos os quatro são subclasses de Field e implementam IFieldCodeTokenInfoProvider e IFieldWithCalendar, portanto compartilham os GetFieldCode(), Update(), Unlink(), Remove() e os membros de formatação (Format) de Field, além de seus próprios interruptores de calendário descritos abaixo.
Selecionando um Calendário Não-Gregoriano
Cada uma das quatro classes expõe UseLunarCalendar (bool) para renderizar o resultado usando o calendário Lunar Hijri ou o calendário Lunar Hebraico, UseSakaEraCalendar (bool) para o calendário da Era Saka e UseUmAlQuraCalendar (bool) para o calendário Um-al-Qura. Defina a propriedade correspondente como true antes de chamar Update() para que o campo recalcule seu resultado usando esse sistema de calendário em vez do calendário gregoriano padrão.
Interruptor Application-Format de FieldDate
FieldDate também expõe UseLastFormat (bool), que controla se o campo usa um formato usado pela última vez pelo aplicativo host quando um novo campo DATE é inserido. FieldCreateDate, FieldPrintDate e FieldSaveDate não expõem essa propriedade.
Dicas e Melhores Práticas
- Defina um interruptor de calendário (
UseLunarCalendar,UseSakaEraCalendarouUseUmAlQuraCalendar) e então chameUpdate()no campo — alterar apenas a propriedade não recalculaResult. - Defina apenas um interruptor de calendário para
trueem uma instância de campo específica; combinar mais de um produz um resultado ambíguo. - Use
Field.Format(umaFieldFormat, coberto no Formatação de Resultado de Campo guia) ao lado desses interruptores de calendário para também controlar a imagem de formatação numérica ou de data/hora aplicada ao resultado. - Escolha a classe que corresponde à semântica que você precisa —
FieldSaveDateeFieldPrintDateleem timestamps registrados no documento, enquantoFieldDatereflete a data em que o campo é atualizado.
Problemas Comuns
| Problema | Causa | Corrigir |
|---|---|---|
| A troca de calendário não tem efeito no resultado exibido | O campo não foi recalculado após a propriedade ser definida | Chame Update() na instância do campo após definir UseLunarCalendar, UseSakaEraCalendar ou UseUmAlQuraCalendar |
UseLastFormat não compila em FieldPrintDate ou FieldSaveDate | Essa propriedade existe apenas em FieldDate | Use FieldDate para o comportamento application-format-follows, ou defina Format explicitamente nas outras classes |
| O resultado exibe o sistema de calendário errado | Mais de um interruptor de calendário foi definido como true no mesmo campo | Defina apenas um de UseLunarCalendar, UseSakaEraCalendar, UseUmAlQuraCalendar por instância de campo |
FAQ
Qual é a diferença entre FieldDate e FieldCreateDate?
FieldDate implementa o campo DATE (recalcula para a data atual a cada atualização); FieldCreateDate implementa CREATEDATE (a data em que o documento foi criado).
Como faço para que um campo de data use o calendário lunar Hijri?
Defina UseLunarCalendar = true na instância FieldDate, FieldCreateDate, FieldPrintDate ou FieldSaveDate, então chame Update().
Qual das quatro classes rastreia quando um documento foi salvo pela última vez?
FieldSaveDate, que implementa o campo SAVEDATE.
Essas classes suportam imagens de formatação personalizada, não apenas alternâncias de calendário?
Sim — cada um expõe um Format propriedade (FieldFormat) herdada da infraestrutura básica do campo; veja a Formatação de Resultado de Campo guia para NumericFormat and DateTimeFormat.
API Reference Resumo
| Classe/Método | Descrição |
|---|---|
FieldDate | Implementa o campo DATE |
FieldCreateDate | Implementa o campo CREATEDATE |
FieldPrintDate | Implementa o campo PRINTDATE |
FieldSaveDate | Implementa o campo SAVEDATE |
UseLunarCalendar | Renderiza o resultado usando o calendário lunar Hijri ou o calendário lunar Hebraico |
UseSakaEraCalendar | Renderiza o resultado usando o calendário da Era Saka |
UseUmAlQuraCalendar | Renderiza o resultado usando o calendário Um-al-Qura |
FieldDate.UseLastFormat | Usa um formato usado anteriormente pela aplicação de hospedagem para um novo campo DATE |
IFieldWithCalendar | Interface implementada por todas as quatro classes para resultados de campo que consideram o calendário |