我从来没有把时间转换成UTC.最近有一个请求要让我的应用程序能够识别时区,而且我一直在圈子里跑.关于将本地时间转换为UTC的大量信息,我发现它相当基本(也许我也做错了),但我找不到任何有关将UTC时间轻松转换为最终用户时区的信息.
简而言之,Android应用程序向我发送(appengine app)数据,在该数据中是一个时间戳.要将时间戳存储到我正在使用的时间:
datetime.utcfromtimestamp(timestamp)
Run Code Online (Sandbox Code Playgroud)
这似乎有效.当我的应用程序存储数据时,它将提前5小时存储(我是EST -5)
数据存储在appengine的BigTable上,当检索到它时,它就像一个字符串一样:
"2011-01-21 02:37:21"
Run Code Online (Sandbox Code Playgroud)
如何在用户正确的时区将此字符串转换为DateTime?
此外,用户时区信息的推荐存储是什么?(你怎么通常存储TZ信息,即:"-5:00"或"EST"等等等等),我敢肯定的答案,我的第一个问题可能包含一个参数的回答第二个.
我要求将日期从本地时间戳转换为UTC然后再转换回本地时间戳.
奇怪的是,当从UTC转换回本地时,python决定它是PDT而不是原始的PST,所以转换后的日期已经增加了一个小时.有人可以向我解释发生了什么或我做错了什么?
from datetime import datetime
from pytz import timezone
import pytz
DATE_FORMAT = '%Y-%m-%d %H:%M:%S %Z%z'
def print_formatted(dt):
formatted_date = dt.strftime(DATE_FORMAT)
print "%s :: %s" % (dt.tzinfo, formatted_date)
#convert the strings to date/time
date = datetime.now()
print_formatted(date)
#get the user's timezone from the pofile table
users_timezone = timezone("US/Pacific")
#set the parsed date's timezone
date = date.replace(tzinfo=users_timezone)
date = date.astimezone(users_timezone)
print_formatted(date)
#Create a UTC timezone
utc_timezone = timezone('UTC')
date = date.astimezone(utc_timezone)
print_formatted(date)
#Convert it back to the user's local timezone …Run Code Online (Sandbox Code Playgroud)