rfm, recuerda que puedes reeditar tus propios mensajes: en cada mensaje aparece un botón para editarlo. Así no tienes que escribir un nuevo mensaje, como este último que has mandado.
Sobre el problema, yo lo que haría sería no usar ningún comando
date del sistema.
Perl tiene sus propias funciones de tiempo:
*
time() devuelve el número de segundos desde el 1970/01/01, así que con ella tenemos una medida del tiempo
*
localtime(). Devuelve la fecha en la zona horaria del sistema. Por defecto, toma la fecha devuelta por time(), así que devuelve la fecha actual.
* Hay otra variante de localtime(), que es
gmtime(), que devuelve la fecha referida a GMT.
Podemos probar:
Using perl Syntax Highlighting
print scalar localtime; # Tue Nov 10 23:17:21 2009Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
localtime(), en modo escalar, devuelve una cadena de caracteres, con la fecha actual formateada en estilo ctime (ver
man 3 ctime). No se puede cambiar el formato.
Hay otra forma de sacar fechas: con el uso del módulo
POSIX:
Using perl Syntax Highlighting
use POSIX
qw(strftime
);
$ahora = strftime
'%A %B %e %H:%M:%S %Y', localtime;
print $ahora, "\n"; # martes noviembre 10 23:22:25 2009
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y ya tenemos la salida de la fecha como queremos. ¡Ojo! La fecha sale en Español porque en mi sistema lo tengo definido así:
Using bash Syntax Highlighting
explorer
@casa:~
/Documents
/Desarrollo
> locale
LANG=es_ES.UTF-8
LC_CTYPE=
"es_ES.UTF-8"
LC_NUMERIC=
"es_ES.UTF-8"
LC_TIME=
"es_ES.UTF-8"
LC_COLLATE=
"es_ES.UTF-8"
LC_MONETARY=
"es_ES.UTF-8"
LC_MESSAGES=
"es_ES.UTF-8"
LC_PAPER=
"es_ES.UTF-8"
LC_NAME=
"es_ES.UTF-8"
LC_ADDRESS=
"es_ES.UTF-8"
LC_TELEPHONE=
"es_ES.UTF-8"
LC_MEASUREMENT=
"es_ES.UTF-8"
LC_IDENTIFICATION=
"es_ES.UTF-8"
LC_ALL=
Coloreado en 0.004 segundos, usando
GeSHi 1.0.8.4
Podemos incluso hacer que salga en el idioma que queramos:
Using perl Syntax Highlighting
use POSIX
qw(strftime locale_h
);
setlocale
(LC_TIME
, 'fr_CA'); # Ahora somos canadienses francófonos, pero solo en las fechas
my $ahora = strftime
'%A %B %e %H:%M:%S %Y', localtime;
print $ahora, "\n"; # mardi novembre 10 23:29:20 2009Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Eso sí, en el sistema debe estar instaladas las localizaciones que deseemos usar.
A propósito... en Español,
los nombres de las estaciones, los meses y días de la semana, cuando no son nombres propios o fechas históricas, NO se ponen en mayúscula (ver
el Diccionario Panhispánico de Dudas, sección 6.1).
Si aún así quieres ponerlo en mayúscula, Perl cuenta con una función para ese tema:
ucfirst(), con lo que tu programa se quedaría así:
Using perl Syntax Highlighting
use POSIX
qw(strftime
);
my $mes = ucfirst strftime
'%B', localtime;
print $mes, "\n"; # NoviembreColoreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Pero si lo haces, recuerda que solo tú serás el responsable.
En fin, hoy en día, lo recomendable para cualquier cosa que tenga que ver con el tiempo, es usar el módulo
DateTime:
Using perl Syntax Highlighting
use DateTime
;
my $ahora = DateTime
->now(locale
=> 'es_ES');
print $ahora->month_name(), "\n"; # noviembre
print $ahora->strftime('%d de %B de %Y'), "\n"; # 10 de noviembre de 2009
print $ahora, "\n"; # 2009-11-11T13:40:32
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4