2012-06-25 2 views
1

우선, 저는 전문직에 의한 코더가 아니라 저조한 네트워크 엔지니어입니다 :) 그러나 저는 자동화에 큰 신념을 갖고 있으며 자신에게 적합한 작업을 처리하기위한 스크립트를 작성하려고합니다Powershell에서 GMT를 제공하는 UNIX 시간

데이터베이스 검사 스크립트에서 사용하기 위해 PowerShell에서 10 분 전에 현재 UNIX 타임 스탬프를 얻으려고합니다. 나는 현재 유닉스 시간을 얻기 위해이를 사용하고 있습니다 :

$unixtime=[int][double]::Parse((Get-Date -UFormat %s))-600 

을하지만 현지 시간 변환기에 UNIX 시간 (http://www.onlineconversion.com/unix_time.htm)를 통해 실행하면, GMT로 현재 시간을 얻고 있습니다 (예를 들어, 지금 실행하면 "1340620608"이라고 표시됩니다. 변환기는 10:36 AM GMT이고 실제 시간은 10:36 AM CDT 임). 이것은 분명히 데이터베이스에서 유닉스 타임 스탬프와 비교할 때 로컬 타임에있는 것처럼 문제를 일으킨다. 현재 GMT 오프셋을 계산하고이를 내 타임 스탬프에 적용하는 함수를 작성 (또는 검색) 할 수 있지만이 문제를 해결할 더 좋은 방법이 있는지 궁금합니다.

답변

2

시도 :

$unixtime=[int][double]::Parse($(Get-Date -date (Get-Date).ToUniversalTime()-uformat %s)) 

은 위 먼저 현재 GMT 시간을 가져 올바른 형식으로 변환합니다.

+0

완벽! :)이 문제에 대해 감사 드리며, 문제는 "전환 전"시간이 현지 시간임을 깨달았습니다. –

1

유닉스 타임 스탬프는 1970-01-01 00:00:00 GMT부터 초로 정의됩니다.

데이터베이스의 타임 스탬프가 1970 년 현지 시간 이후 초로 저장되는 경우 데이터베이스를 수정해야 할 수 있습니다. 하지만 데이터베이스 타임 스탬프는 표준 UTC 기반 유닉스 타임 스탬프 일 가능성이 높습니다.

또한 시스템의 시간 및 시간대 설정을 확인해야합니다. 컴퓨터가 GMT를 현지 시간으로 간주 할 수 있습니다 (시계가 몇 시간 쉬어 질 수 있음).

+0

당신은 절대적으로 옳습니다. DB의 우표는 적절한 유닉스 타임 스탬프 형식입니다. 위의 Russellds의 대답을 읽은 후에 실제 문제는 PowerShell이 ​​로컬 시스템 시간 (컨트롤 패널 당 올바른 표준 시간대에 있음)을 가져 와서 "1/1/70 "GMT로 현지 시간을 변경하지 않고. 그런 다음 GMT로 간주되지만 타임 스탬프는 없습니다. –

0

이 기능이 유용합니까?

(Get-Date).AddMinutes(-10).Subtract((Get-Date 1/1/1970)).TotalSeconds 
관련 문제