:TITLE: Data e hora - clock
;#
;# RCSID: $Header: /home/cvs/TclTutor3/lesson/Tcl_Portuguese/Tcl_Portuguese41.lsn,v 1.1 2008/08/02 12:37:36 clif Exp $
;# Copyright (c) 1995 Clif Flynt
;# 9300 Fleming Rd.
;# Dexter, MI  48130
;# clif@cflynt.com
;# Veja o arquivo "AVISO" com os termos da licença.
;#
;#*********************************************************
;# Portuguese translation: Lucio Agostinho Rocha
;# E-mail: outrosdiasvirao@yahoo.com.br
;# Last update: 17/01/2006
;#*********************************************************
:LESSON_TEXT_START_LEVEL 0:
O comando <B>clock</B> fornece acesso às funções de hora e data
em Tcl. Dependendo dos subcomandos chamados, ele pode adquirir
a hora atual, ou converter a hora e a data em diferentes representações.
<DL>
<B><DT>clock seconds </B>
<DD> O comando <B>clock seconds</B> retorna a hora em segundos desde
a <I>época</I>. A data da época varia para diferentes sistemas 
operacionais, portanto esse valor é útil para propósitos de
comparação, ou como uma entrada para o comando <B>clock format</B>.
<P>
<B><DT>clock format</B> <I>valorClock</I> ?<B>-gmt</B> <I>booleano</I>? ?<B>-format</B> <I>string</I>? 
<DD> O subcomando <B>format</B> formata um <I>valorClock</I> (como o retornado
pelo comando <B>clock clicks</B>) em uma string humana legível.
<P>
O modificador <B>-gmt</B> pega um valor booleano como segundo argumento. Se
o valor é <B>1</B> ou <B>True</B>, então a hora será formatada como o
Tempo Significante de Greenwich, caso contrário, ela será formatada
como a hora local.
<P>
A opção <B>-format</B> controla qual o formato do retorno. O conteúdo
do argumento <I>string</I> para formatar tem conteúdo similar
à declaração format (como discutido nas lições 19, 33 e 34). Além disso,
há muito mais descritores <B>%*</B> que podem ser usados para descrever
a saída.
<P>
Esses descritores incluem:
<UL>
<B><LI>%a</B> . . . . Nome abreviado do dia da semana (Seg, Ter, etc.)
<B><LI>%A</B> . . . . Nome completo do dia da semana (Segunda, Terça, etc.)
<B><LI>%b</B> . . . . Nome abreviado do mês (Jan, Fev, etc.)
<B><LI>%B</B> . . . . Nome completo do mês (Janeiro, Fevereiro, etc.)
<B><LI>%d</B>. . . . . Dia do mês
<B><LI>%j</B> . . . . . Dia do ano Juliano
<B><LI>%m</B> . . . . Número do mês (01-12)
<B><LI>%y</B>. . . . . Ano em séculos
<B><LI>%Y</B> . . . . Ano com 4 dígitos
<P>
<B><LI>%H</B> . . . . Hora (00-23)
<B><LI>%I</B> . . . . . Hora (00-12)
<B><LI>%M</B> . . . . Minutos (00-59)
<B><LI>%S</B> . . . . . Segundos (00-59)
<B><LI>%p</B> . . . . . PM ou AM
<P>
<B><LI>%D</B> . . . . Data como %m/%d/%y
<B><LI>%r</B>. . . . . Hora como %I:%M:%S %p
<B><LI>%R</B> . . . . Hora como %I:%M
<B><LI>%T</B> . . . . Hora como %I:%M:%S
<B><LI>%Z</B> . . . . Nome da Zona Horária
</UL>
<B><DT>clock scan</B> <I>stringData</I>
<DD> O subcomando <B>scan</B> converte uma string humana legível para
um valor de hora do sistema, assim como seria retornado pelo comando
<B>clock seconds</B>
<P>
O argumento <I>stringData</I> contém strings nessas formas:
<DL>
<DT>hora
<DD>Uma hora do dia em um dos formatos mostrados abaixo. Meridiano
pode ser AM, ou PM, ou uma variante capitalizada. Se não for
especificado, então a hora (hh) é interpretada como um relógio de
24 horas. A Zona pode ser uma descrição de três letras de uma
Zona Horária, como EST, PDT, etc.
<UL>
<LI>hh:mm:ss ?meridiano? ?zona?
<LI> hhmm ?meridiano? ?zona?
</UL>
<DT>data
<DD>A data em um dos formatos mostrados abaixo.
<UL>
<LI> mm/dd/yy
<LI> mm/dd
<LI> nomeMes dd, yy
<LI> nomeMes dd
<LI> dd nomeMes yy
<LI> dd nomeMes
<LI> dia, dd nomeMes yy
</UL>
</DL>
</DL>

:TEXT_END:

:LESSON_TEXT_START_LEVEL 1:
O comando <B>clock</B> fornece acesso às funções de hora e data
em Tcl. Dependendo dos subcomandos chamados, ele pode adquirir
a hora atual, ou converter a hora e a data em diferentes representações.
<P>
O comando <B>clock</B> é um método independente de plataforma que
adquire a funcionalidade de exibição do comando Unix <B>date</B>, e
fornece acesso aos valores retornados pela chamada Unix  <B>gettime()</B>.
<DL>
<B><DT>clock seconds </B>
<DD> O comando <B>clock seconds</B> retorna a hora em segundos desde
a <I>época</I>. A data da época varia para diferentes sistemas 
operacionais, portanto esse valor é útil para propósitos de
comparação, ou como uma entrada para o comando <B>clock format</B>.
<P>
<B><DT>clock format</B> <I>valorClock</I> ?<B>-gmt</B> <I>booleano</I>? ?<B>-format</B> <I>string</I>? 
<DD> O subcomando <B>format</B> formata um <I>valorClock</I> (como o retornado
pelo comando <B>clock clicks</B>) em uma string humana legível.
<P>
O modificador <B>-gmt</B> pega um valor booleano como segundo argumento. Se
o valor é <B>1</B> ou <B>True</B>, então a hora será formatada como o
Tempo Significante de Greenwich, caso contrário, ela será formatada
como a hora local.
<P>
A opção <B>-format</B> controla qual o formato do retorno. O conteúdo
do argumento <I>string</I> para formatar tem conteúdo similar
à declaração format (como discutido nas lições 19, 33 e 34). Além disso,
há muito mais descritores <B>%*</B> que podem ser usados para descrever
a saída.
<P>
Esses descritores incluem:
<UL>
<B><LI>%a</B> . . . . Nome abreviado do dia da semana (Seg, Ter, etc.)
<B><LI>%A</B> . . . . Nome completo do dia da semana (Segunda, Terça, etc.)
<B><LI>%b</B> . . . . Nome abreviado do mês (Jan, Fev, etc.)
<B><LI>%B</B> . . . . Nome completo do mês (Janeiro, Fevereiro, etc.)
<B><LI>%d</B>. . . . . Dia do mês
<B><LI>%j</B> . . . . . Dia do ano Juliano
<B><LI>%m</B> . . . . Número do mês (01-12)
<B><LI>%y</B>. . . . . Ano em séculos
<B><LI>%Y</B> . . . . Ano com 4 dígitos
<P>
<B><LI>%H</B> . . . . Hora (00-23)
<B><LI>%I</B> . . . . . Hora (00-12)
<B><LI>%M</B> . . . . Minutos (00-59)
<B><LI>%S</B> . . . . . Segundos (00-59)
<B><LI>%p</B> . . . . . PM ou AM
<P>
<B><LI>%D</B> . . . . Data como %m/%d/%y
<B><LI>%r</B>. . . . . Hora como %I:%M:%S %p
<B><LI>%R</B> . . . . Hora como %I:%M
<B><LI>%T</B> . . . . Hora como %I:%M:%S
<B><LI>%Z</B> . . . . Nome da Zona Horária
</UL>
<B><DT>clock scan</B> <I>stringData</I>
<DD> O subcomando <B>scan</B> converte uma string humana legível para
um valor de hora do sistema, assim como seria retornado pelo comando
<B>clock seconds</B>
<P>
O argumento <I>stringData</I> contém strings nessas formas:
<DL>
<DT>hora
<DD>Uma hora do dia em um dos formatos mostrados abaixo. Meridiano
pode ser AM, ou PM, ou uma variante capitalizada. Se não for
especificado, então a hora (hh) é interpretada como um relógio de
24 horas. A Zona pode ser uma descrição de três letras de uma
Zona Horária, como EST, PDT, etc.
<UL>
<LI>hh:mm:ss ?meridiano? ?zona?
<LI> hhmm ?meridiano? ?zona?
</UL>
<DT>data
<DD>A data em um dos formatos mostrados abaixo.
<UL>
<LI> mm/dd/yy
<LI> mm/dd
<LI> nomeMes dd, yy
<LI> nomeMes dd
<LI> dd nomeMes yy
<LI> dd nomeMes
<LI> dia, dd nomeMes yy
</UL>
</DL>
</DL>

:TEXT_END:

:LESSON_TEXT_START_LEVEL 2:
A maioria dos sistemas de computador marcam a hora e o dia 
armazenando o número de segundos que se passaram desde uma data
arbitrária na memória. A data de início (0 segundos) é normalmente
referenciada como <B>a época</B>, uma vez que foi quando a hora
começou (para aquele sistema).
Quando você precisa conhecer a data atual e a hora, o computador
converte aquele valor de segundos desde a época em uma string
legível para o usuário.
<P>
Em Tcl, o comando <B>clock</B> fornece acesso às funções de data e hora.
Dependendo dos subcomandos chamados, ele pode adquirir a hora atual,
ou converter a data e hora em diferentes representações.
<DL>
<B><DT>clock seconds </B>
<DD> O comando <B>clock seconds</B> retorna a hora em segundos desde
a <I>época</I>. A data da época varia para diferentes sistemas 
operacionais, portanto esse valor é útil para propósitos de
comparação, ou como uma entrada para o comando <B>clock format</B>.
<P>
<B><DT>clock format</B> <I>valorClock</I> ?<B>-gmt</B> <I>booleano</I>? ?<B>-format</B> <I>string</I>? 
<DD> O subcomando <B>format</B> formata um <I>valorClock</I> (como o retornado
pelo comando <B>clock clicks</B>) em uma string humana legível.
<P>
O modificador <B>-gmt</B> pega um valor booleano como segundo argumento. Se
o valor é <B>1</B> ou <B>True</B>, então a hora será formatada como o
Tempo Significante de Greenwich, caso contrário, ela será formatada
como a hora local.
<P>
A opção <B>-format</B> controla qual o formato do retorno. O conteúdo
do argumento <I>string</I> para formatar tem conteúdo similar
à declaração format (como discutido nas lições 19, 33 e 34). Além disso,
há muito mais descritores <B>%*</B> que podem ser usados para descrever
a saída.
<P>
Esses descritores incluem:
<UL>
<B><LI>%a</B> . . . . Nome abreviado do dia da semana (Seg, Ter, etc.)
<B><LI>%A</B> . . . . Nome completo do dia da semana (Segunda, Terça, etc.)
<B><LI>%b</B> . . . . Nome abreviado do mês (Jan, Fev, etc.)
<B><LI>%B</B> . . . . Nome completo do mês (Janeiro, Fevereiro, etc.)
<B><LI>%d</B>. . . . . Dia do mês
<B><LI>%j</B> . . . . . Dia do ano Juliano
<B><LI>%m</B> . . . . Número do mês (01-12)
<B><LI>%y</B>. . . . . Ano em séculos
<B><LI>%Y</B> . . . . Ano com 4 dígitos
<P>
<B><LI>%H</B> . . . . Hora (00-23)
<B><LI>%I</B> . . . . . Hora (00-12)
<B><LI>%M</B> . . . . Minutos (00-59)
<B><LI>%S</B> . . . . . Segundos (00-59)
<B><LI>%p</B> . . . . . PM ou AM
<P>
<B><LI>%D</B> . . . . Data como %m/%d/%y
<B><LI>%r</B>. . . . . Hora como %I:%M:%S %p
<B><LI>%R</B> . . . . Hora como %I:%M
<B><LI>%T</B> . . . . Hora como %I:%M:%S
<B><LI>%Z</B> . . . . Nome da Zona Horária
</UL>
<B><DT>clock scan</B> <I>stringData</I>
<DD> O subcomando <B>scan</B> converte uma string humana legível para
um valor de hora do sistema, assim como seria retornado pelo comando
<B>clock seconds</B>
<P>
O argumento <I>stringData</I> contém strings nessas formas:
<DL>
<DT>hora
<DD>Uma hora do dia em um dos formatos mostrados abaixo. Meridiano
pode ser AM, ou PM, ou uma variante capitalizada. Se não for
especificado, então a hora (hh) é interpretada como um relógio de
24 horas. A Zona pode ser uma descrição de três letras de uma
Zona Horária, como EST, PDT, etc.
<UL>
<LI>hh:mm:ss ?meridiano? ?zona?
<LI> hhmm ?meridiano? ?zona?
</UL>
<DT>data
<DD>A data em um dos formatos mostrados abaixo.
<UL>
<LI> mm/dd/yy
<LI> mm/dd
<LI> nomeMes dd, yy
<LI> nomeMes dd
<LI> dd nomeMes yy
<LI> dd nomeMes
<LI> dia, dd nomeMes yy
</UL>
</DL>
</DL>

:TEXT_END:

:CODE_START:
;# Adquire a hora do sistema em segundos
set horaSistema [clock seconds]

;# Exibe aquela hora usando os descritores de hora, minuto e segundo.
puts "A hora é: [clock format $horaSistema -format %H:%M:%S]"

;# Exibe a data usando um formato reduzido
puts "A data é: [clock format $horaSistema -format %D]"

;# Você pode usar declarações format complexas.
puts [clock format $horaSistema -format {Hoje é: %A, %d de %B de %Y}]

;# E essa é a saída padrão para a hora, sem a opção -format
puts "\nO formato padrão para a hora é: [clock format $horaSistema]\n"

;# As versões do livro e filme de 2001 tinham datas diferentes para
;# quando o HAL 9000 viesse a surgir.
;# Nós podemos usar o comando scan para exibir quantos segundos eles
;# diferiram.

set HALAniversarioLivro "Jan 12, 1997"
set HALAniversarioFilme "Jan 12, 1992"
set segundosLivro [clock scan $HALAniversarioLivro]
set segundosFilme [clock scan $HALAniversarioFilme]

puts "As versões do livro e filme de '2001, Uma Odisséia no Espaço' tinham uma"
puts "discrepância de [expr $segundosLivro - $segundosFilme] segundos em como"
puts "brevemente nós poderíamos ter computadores sentientes como o HAL 9000"

:TEXT_END: