Había asumido que sería tan simple como $ENV{TZ}
, pero la variable de entorno TZ
no está configurada, y aun así el comando date
todavía sabe que estoy en EDT, por lo que debe haber alguna otra forma de determinar la zona horaria (aparte de decir chomp(my $tz = qx/date +%Z/);
) .¿Cómo determino la zona horaria actual con la que está configurada una máquina con Perl?
Respuesta
use POSIX;
print strftime("%Z", localtime()), "\n";
Pensé en% Z, pero recuerdo algo que no funciona en algunos sistemas. –
Según el tiempo de trabajo del hombre,% Z es una especificación estándar y debe ser compatible con todas las plataformas. –
Creo que estaba recordando esto de los documentos POSIX: el especificador "Z" es notoriamente imposible de importar ya que los nombres de las zonas horarias no son estándar. Cumplir con los especificadores numéricos es la ruta más segura. Pero creo que esto es probablemente lo suficientemente seguro para mis propósitos. –
use POSIX;
localtime();
my ($std, $dst) = POSIX::tzname();
tzname()
le da acceso a la POSIX mundial tzname
- pero tiene que haber llamado localtime()
para que sea configurada en el primer lugar.
Si quieres algo más portátil que POSIX
(pero probablemente mucho más lento) que puede utilizar DateTime :: Zona horaria para esto:
use DateTime::TimeZone;
print DateTime::TimeZone->new(name => 'local')->name();
Tal vez esto más rápido:
my @lt = localtime(12*60*60);
my @gt = gmtime(12*60*60);
$tz = @lt[2] - @gt[2];
$tz_ = sprintf("%+03d:00", $tz); # for +02:00 format
Para complementar su respuesta, puede usar el botón [edit] (http://stackoverflow.com/posts/29400576/edit). – ZygD
Si sólo necesita algo así como +05:30
(UTC + 5.5/India time), puede usar el siguiente código.
my @lt = localtime();
my @gt = gmtime();
my $hour_diff = $lt[2] - $gt[2];
my $min_diff = $lt[1] - $gt[1];
my $total_diff = $hour_diff * 60 + $min_diff;
my $hour = int($total_diff/60);
my $min = abs($total_diff - $hour * 60);
print sprintf("%+03d:%02d", $hour, $min);
Responde esta respuesta a la respuesta de Pavel anterior.
- 1. impulso: obtener la local_date_time actual con la zona horaria actual de la máquina
- 2. PHP zona horaria no configurada
- 3. Powershell Mostrar la hora actual con la zona horaria
- 4. Fecha de PostgreSQL() con la zona horaria
- 5. datetime para encadenar con la zona horaria
- 6. ¿Obtener la fecha actual, dada una zona horaria en PHP?
- 7. Cómo ignorar la zona horaria del usuario y forzar la fecha() utiliza la zona horaria específica
- 8. Cómo obtener la zona horaria actual del usuario en C#
- 9. Obtener la zona horaria actual en la aplicación de Android
- 10. ajustar la zona horaria
- 11. Analiza una fecha con la zona horaria "Etc/GMT"
- 12. Cómo funciona la zona horaria de django con model_field's auto_now_add
- 13. ¿cómo lidias con los problemas de la zona horaria?
- 14. ¿Cómo se muestra DateTime con una zona horaria abreviada?
- 15. ¿Cómo son los sitios principales que detectan la zona horaria?
- 16. ¿Cómo se muestra una fecha con una zona horaria personalizada?
- 17. Mostrar fecha/hora UTC en fecha/hora de acuerdo con la zona horaria actual
- 18. Java: zona horaria por la que la zona horaria diferente da el mismo valor en milisec
- 19. ¿Cómo obtener la zona horaria del cliente?
- 20. Cómo guardar correctamente una zona horaria con Ruby y MongoId?
- 21. Ajuste de la zona horaria en PHP con DateTime/DateTimeZone
- 22. Perl DateTime :: zona horaria que no se encuentra (Bugzilla instalar)
- 23. ¿Cómo cambio la zona horaria en CakePHP?
- 24. cómo cambio la zona horaria usando adb
- 25. Java GregorianCalendar Zona horaria
- 26. conversión de cadena hasta la fecha con zona horaria
- 27. Cómo configurar correctamente la zona horaria mysql
- 28. celerybeat utiliza UTC incluso con la configuración de zona horaria
- 29. Obtener NSDate de NSDate ajustado con la zona horaria
- 30. Mysql Fecha y hora con la zona horaria
Solo para información adicional, en mi sistema, la zona horaria está regulada por el archivo/etc/localtime y libc parece saber cómo usar eso. –