2010-05-13 19 views
7

¿Hay alguna manera de obtener el desplazamiento de una zona horaria determinada (identificador como EDT o America/New_York) de GMT en la secuencia de comandos de linux shell?Compensación de una zona horaria dada desde GMT en la secuencia de comandos de linux shell

+0

¿Qué es exactamente lo que "regalan"? –

+0

El identificador de cadena para una zona horaria. p.ej. America/New_York o EDT. – dutch

+0

si desea calcular desde localtime es posible. Pero a partir de una cadena no estándar que parece un poco desafiante. – Nix

Respuesta

12

Exporte su variable de entorno TZ e imprima la fecha con% z para el desplazamiento de la zona horaria.

#!/bin/sh 
export TZ=":Pacific/Auckland" 
date +%z 
+6

O si no desea manipular el entorno actual: 'TZ =": Pacific/Auckland "date +% z' –

+0

No necesitamos dos puntos antes de la zona horaria –

+0

¿Esto tomará en cuenta el horario de verano? –

2

Ésta es una manera indirecta de hacerlo, pero funciona (loosely based on this):

#!/bin/bash 
ZONE=$1 
TIME=$(date +%s --utc -d "12:00:00 $ZONE") 
UTC_TIME=$(date +%s --utc -d "12:00:00") 
((DIFF=UTC_TIME-TIME)) 
echo - | awk -v SECS=$DIFF '{printf "%d",SECS/(60*60)}' 

Guardar que a medida que tzoffset, hacen que sea ejecutable y ejecutarlo así:

tzoffset PST 

Este script en su forma actual solo maneja zonas horarias abreviadas.

Cuestiones relacionadas