2011-07-27 4 views
2

나는 형식이 다음과 같은 파일들이 있습니다 : 1311597859.567497 y_value_to_plot. 첫 번째 토큰은 신기원 이후의 시간, 즉 유닉스 시간이다. 사용자는이 파일 이름과 "America/New_York"또는 "Europe/London"과 같은 시간대 사양을 사용하여 plot_file.pl을 호출하려고합니다. 이 파일에서 gnuplot을 set xdata time; set timefmt "%s"으로 호출하면 작동하지만 UTC 시간으로 시간이 표시됩니다. 그러나 사용자는 현지 시간을보고 싶어합니다. 따라서 1311597859.567497의 경우 시간대를 변경하지 않고 gnuplot은 12:44:19을 표시하지만 사용자가 America/New_York을 지정하면 gnuplot 창에서 08:44:19를보고 싶습니다. 나는 간단한 수정은 utc와 주어진 시간대 사이의 오프셋을 계산하고 토큰에서 빼고이 새 파일에 새 줄거리를 실행하는 것입니다. 따라서 Perl의 주어진 시간대에서 offset_seconds의 UTC를 얻을 수있는 방법을 찾고있었습니다.주어진 시간대의 초를 얻는 방법 - 펄의 UTC 시간

+2

유닉스 시간이 UTC일까요? – PtPazuzu

+0

초 단위의 오프셋이 다릅니다. 일부 날짜 및 시간에는 America/New_York과 14,400s 차이가 있으며 다른 날짜는 18,000입니다. – ikegami

+0

"나는 유닉스 시간있다"라는 것이 정확히 무엇을 의미합니까? 일반적으로 Unix 시간은 1970-01-01 00:00:00 GMT 이후의 초 수입니다. 현지 시간대의 영향을받지 않습니다. 예를 들어, 현재 유닉스 시간은 1311823238입니다. 당신이 그 숫자가 아닌 다른 것을 가지고 있다면, 당신이 가진 것을 정확하게 설명하십시오. 그것은 문자열인가? 그렇다면, 어떻게 생겼습니까? (@justkt에서 알 수 있듯이, "현지 시간으로 초"를 지키지는 않을 것 같습니다. 그런 가치를 창출 할 수 있을지는 모르겠군요.) –

답변

4

유닉스 시간으로 나는 당신이 현지 시간의 신기원으로부터 초를 의미한다고 생각하고 당신은 UTC로 그 시대로부터 초로 변환하려고 시도하고있다.

Time::Zone 또는 DateTime::TimeZone (부분은 DateTime)과 같은 모듈을 사용하여 계산을 고려하십시오. 날짜 시간을 사용하여 단순히 로컬 시간에서 날짜 시간 개체를 변환 할 수

use DateTime; 
use DateTime::TimeZone; 

# cache local timezone because determining it can be slow 
# if your timezone is user specified get it another way 
our $App::LocalTZ = DateTime::TimeZone->new(name => 'local'); 
my $tz = DateTime::TimeZone->new(name => $App::LocalTZ); 

my $dt = DateTime->now(); # again, time will be whatever you are passing in 
          # formulated as a DateTime 
my $offset = $tz->offset_for_datetime($dt); 

참고 : 날짜 시간 및 날짜 시간 : 시간대와

use Time::Zone; 
my $offset_sec = tz_local_offset(); # or tz_offset($tz) if you have the TZ 
            # in a variable and it is not local 

my $time = time(); # realistically it will be the time value you provide in localtime 
my $utc_time = $time + $offset_sec; 

: 시간 :: 지역으로 예를 들어

UTC 시간은 set_time_zone('UTC')을 통해 확인한 다음 gnuplot에도 포맷합니다.

로컬 시간대에서 몇 초 만에 얻을 수 있다면 손으로 직접 수행하려면 gmtime의 출력을 포맷 할 수 있습니다 (아마도 날짜/시간 문자열에서 mktime을 사용).

+0

불행히도 RHEL6의 perl 설치는 둘 다 작동하지 않습니다. 다른 종속성이있을 수 있기 때문에 CPAN을 추가하고 싶지 않았습니다. –

관련 문제