2017-03-17 1 views
0

에 날짜를 변환 유지 :파이썬 스크립트 내가 다음이 UTC

import psycopg2 
from openpyxl import Workbook 
wb = Workbook() 
wb.active =0 
ws = wb.active 
ws.title = "Repair" 
ws.sheet_properties.tabColor = "CCFFCC" 

print(wb.sheetnames) 

import datetime 
import smtplib 
import mimetypes 

import logging 
LOG_FILENAME = 'log-production.out' 
logging.basicConfig(filename=LOG_FILENAME, level=logging.DEBUG) 

logging.debug('This message should go to the log file') 

from datetime import date, timedelta 
import os, sys 
try: 
    conn = psycopg2.connect("connection string") 
except: 
    print "I am unable to connect to the database" 

cur = conn.cursor() 
cur.execute("""SELECT ams.unit.line,ams.unit.work_order,ams.unit.model_num, ams.unit.revision ,ams.unit.serial_num,ams.unit.lpn, ams.unit_repair_detail.level_1_name as level_1, 
      ams.unit_repair_detail.level_2_name as level_2, ams.unit_repair_detail.level_3_name as level_3,ams.unit_repair_detail.level_4_name as level_4,ams.unit_repair.date_started AT TIME ZONE 'UTC' as date_started,ams.unit_repair.date_completed AT TIME ZONE 'UTC' as date_completed 
        FROM ams.unit_repair 
         left join 
          ams.unit 
            on ams.unit_repair.unit_id=ams.unit.id and 
            LOWER(ams.unit_repair.line) = LOWER(ams.unit.line) 
         right join 
          ams.unit_repair_detail 
            on ams.unit_repair.sid = ams.unit_repair_detail.unit_repair_sid 
            WHERE 
            LOWER(ams.unit.line) like ('%') and 
             ams.unit_repair_detail.date_created >= (CURRENT_TIMESTAMP AT TIME ZONE 'UTC' - interval '24 hours') 
            AND ams.unit_repair_detail.date_created <= (CURRENT_TIMESTAMP AT TIME ZONE 'UTC') 
            and LOWER(ams.unit.model_num) like LOWER('%') 

            order by model_num asc""") 
rows = cur.fetchall() 
print "\nShow me the databases:\n" 
col_names = ["Line","Work order","Model number","Revision","Serial number","Lpn","Level 1","Level 2","Level 3","Level 4","Date started","Date completed"]  

ws.append(col_names) 
for row in rows: 
    ws.append(row) 

이 작동하지만 일광 절약 시간 후 모든 변경 된 쿼리는 DB에 올바른 데이터를 반환 ... 부러하지만 난 실행할 때 그것은 python 스크립트에서 파일이 만들어지면 여전히 UTC 시간입니다. 나는 내가하고있는 일이 UTC로 거슬러 올라간다는 것을 모른다. 아무도 도와 줄 수 있니? 내가 중심이 상단의 시간대를 설정 시도했다 그래서 나는 또한

>>> import time 
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone 
>>> offset/60/60 * -1 

나는 또한 내 AT TIME ZONE UTC 제품에 변경 시도를 시도

cur.execute("SET TIME ZONE 'America/Chicago';") 

행운과 중앙에 UTC로 변환 중부 표준시 및 행운을 빌어 요 ... 나는 웹상에서 여러 솔루션을 시도했지만 아무것도 작동하는 것으로 보입니다. 어떤 도움을 주시면 대단히 감사하겠습니다 !! 당신은 쿼리

`at time zone 'America/Chicago' 

는 문제를 해결할 수에 다음을 추가하면 사람이 미래에 이런 일에 실행 단지의 경우

+0

** openpyxl **과 아무 관련이 없습니다. ** tag openpyxl **을 제거하십시오. – stovfl

+0

명령 줄에서 얻은 결과는 무엇입니까? Psycopg에서 얻은 것과 같은 것입니까? –

+0

잘 나는 IDLE를 사용하여 그것을 실행하지만 얻을 수있는 결과는 AT TIME ZONE 'UTC'를 쿼리의 SELECT 문에서 제거한 것과 같습니다. 그래서 예를 들어, 같은 날짜를 얻을 : 내 xlsx 파일에 : 2017-03-17 11:38:51 그리고 내가 "2017-03-17 06 : 37 : 57.3-05"쿼리를 실행하면 그게 무슨 뜻입니까 결과입니다 ? 나는 어떤 에러도 내지 못한다 ... 잘 실행되지만 날짜는 변환과 같이 무시된다. – cocopan

답변

0

... 나는이 문제를 발견했다. 어떻게 든 at time zone UTC이 충분하지 않아도 출력 시간대를 지정해야합니다.

관련 문제