从本地->UTC转换

你好,
我在弄清楚如何转换python时遇到了一些麻烦
DateTime到UTC.我有一个UTC日期(例如2008-07-11 00:00:00).我会
喜欢创建UTC日期,以便我将其发送到mySQL(哪个
默认情况下,请在本地日期处所有日期),它已经有
合并适当的UTC偏移量.我尝试查看
文档http://python.active-venture.com/lib...dateTime.html)
没有任何运气.
有没有人有什么建议?任何帮助将是极大的
感谢.
谢谢,
基思

# 回答1


En Fri,2008年7月11日15:42:37 -0300,Keith Hughitt
您必须使用" timezone Aware" DateTime对象.如果你想要的就是
存储一个UTC日期,您可以在Python中找到的Tzinfo演示类
更完整的实现位于
如果将"时区意识到" DateTime对象作为SQL参数,则
数据库应正确存储(但是我没有MySQL实例
手进行测试)
- -
Gabriel Genellina
# 回答2


Gabriel Genellina :
您必须使用" timezone Aware" DateTime对象.如果你想要的就是
存储一个UTC日期,您可以在Python中找到的Tzinfo演示类
更完整的实现位于
Python-Dateutil软件包还提供了与TimeZone-Aware进行处理的课程
DateTime对象.参见
- -
自由始终是持不同政见者的自由.
(罗莎·卢森堡)
# 回答3


在7月12日,12:52*AM," Gabriel Genellina"
写道:
您必须使用" timezone Aware" DateTime对象.如果您想要的只是*
存储一个UTC日期,即您可以在Python*中找到的Tzinfo演示类别
更完整的实现位于
如果将" TimeZone Aware" DateTime对象作为SQL参数传递,则为**
数据库应正确存储它(但是我没有一个MySQL实例.
手进行测试)
- -
Gabriel Genellina
感谢Gabriel的建议.我下载了Tzinfo演示课,保存了
它作为
utc.py并导入它.我仍然不确定如何使用它
尽管.看起来像
该文件已经创建了UTC Tzinfo类的实例(第20行:
" utc = utc()"),
但是,当我尝试在口译员中测试它时,它不能
成立.我是新来的
对于Python来说,我可能会很明显,但要做
你有什么想法吗?
这是我正在尝试的:
=============输出开始====================
Python 2.5.2(R252:60911,Apr 21 2008,11:12:42)
[GCC 4.2.3(Ubuntu 4.2.3-2ubuntu7)]在Linux2上
键入"帮助","版权","学分"或"许可"以获取更多信息.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
TypeError:'mod ule'对象不可呼应
Trackback(最近的最新电话):
文件" ",第1行,<模块>
名称:名称" UTC"未定义
Trackback(最近的最新电话):
文件" ",第1行,<模块>
TypeError:"模块"对象不可呼应
=============输出开始====================
有任何想法吗?
谢谢,
基思
# 回答4


EN星期一,2008年7月14日12:06:30 -0300,基思·休·希特(Keith Hughitt)
您必须使用" timezone Aware" DateTime对象.如果您只需要iSTo *存储一个UTC日期,则可以在

感谢Gabriel的建议.我下载了Tzinfo演示课,保存了
它作为
utc.py并导入它.我仍然不确定如何使用它
尽管.看起来像
该文件已经创建了UTC Tzinfo类的实例(第20行:
" utc = utc()"),
但是,当我尝试在口译员中测试它时,它不能
成立.我是新来的
对于Python来说,我可能会很明显,但要做
你有什么想法吗?
Python中的导入语句的行为与类似
其他语言的陈述 - 可能会使您感到困惑.我会尝试
使用此示例解释它.
你有:
-a * file * utc.py,包含 *模块 * UTC的源代码.它
包含:
-A *类 *定义(UTC)和
- 该类的 *实例 * UTC.
---开始UTC.PY ---
UTC类(Tzinfo):
...
UTC = UTC()
...
---结束UTC.PY ---
在这里,您已导入 *模块 * UTC.也就是说,UTC名称现在是指
到刚刚从utc.py文件加载的新创建的模块.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
TypeError:"模块"对象不可呼应
错误来自UTC():UTC是一个模块,UTC()正在尝试"调用"
它,由于模块不是可呼叫的对象,因此我们会得到一个typeError.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
名称:名称" UTC"未定义
到目前为止,我们已导入的 *仅 *名称是UTC-模块.小写UTC
未定义.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
TypeError:"模块"对象不可呼应
与上面相同...
好,如何解决?我们知道UTC指的是 *模块 *
姓名.要在该模块内获取 *类 *,请使用UTC.UTC-重试
口译员.要创建该类的新实例,您可以使用
UTC.UTC().要获得在UTC模块中已经创建的实例,请使用
UTC.UTC
**或者**
明确导入这些名称:
pyfrom utc导入UTC
在这种情况下,名称UTC指模块内的 *类 *.
在此特定示例中,它可能会令人困惑 - 两者都有相同的名称.
标准库中的另一个示例:Poplib模块包含一个
POP3类,因此执行此行之后:
pyfrom poplib导入pop3
POP3的名称是指该类. Poplib模块本身不是
直接可用.
返回UTC模块 ,您可以使用:
pyfrom utc导入UTC
现在,UTC指的是在模块中已经创建的 *实例 *.
在您的情况下,最后表格可能是最方便的:
Pyimport DateTime
pyfrom utc导入UTC
pyprint dateTime.DateTime(2008,7,7,14,20,30,0,0,0,UTC)
2008-07-14 20:30:00+00:00
- -
Gabriel Genellina

# 回答5


谢谢加布里埃尔!
这有助于为我清除事情.以上方法效果很好.我
只有一个剩下的问题:
如何将DateTime对象传递给MySQL?
到目前为止,我一直在做的是将查询构建为字符串
例子:
查询="插入图像值(%d,%d,%s,'%s')"%(ID,MEAS,
日期," JPG")
Cursor.execute(查询)
这适用于常规DateTime对象,并将其传递给
字符串相似
到:" 2003-10-01 00:00:00."但是,在合并时区时,
结果字符串
为" 2003-10-01 00:00:00+00:00"的形式.不幸的是,mysql确实
不认识
偏移.
我知道你说你不使用mysql,但是你会怎么做
执行类似的查询
在您通常与之接口的数据库上?
谢谢,
基思
在7月15日,12:04*上午," Gabriel Genellina"
写道:
Python中的导入语句的行为与类似 *的行为不同.
其他语言的陈述 - 可能会使您感到困惑.我会尝试 *
使用此示例解释它.
你有:
-a * file * utc.py,包含 *模块 * UTC的源代码.它 *
包含:
-A *类 *定义(UTC)和
- 该类的 *实例 * UTC.
---开始UTC.PY ---如果您将" TimeZone Aware" DateTime对象作为SQL参数传递
UTC类(Tzinfo):
* * ...
UTC = UTC()
...
---结束UTC.PY ---
在这里,您已导入 *模块 * UTC.也就是说,UTC的名称现在引用*
到刚刚从utc.py文件加载的新创建的模块.
Trackback(最近的最新电话):
*文件" ",第1行,<模块>
TypeError:"模块"对象不可呼应

错误来自UTC():UTC是一个模块,UTC()正在尝试"呼叫" *
它,由于模块不是可呼叫的对象,因此我们会得到一个typeError.
Trackback(最近的最新电话):
*文件" ",第1行,<模块>
名称:名称" UTC"未定义

到目前为止,我们已导入的 *仅 *名称是UTC-模块.小写UTC *
未定义.
Trackback(最近的最新电话):
*文件" ",第1行,<模块>
TypeError:"模块"对象不可呼应

与上面相同...
好,如何解决?我们知道UTC用相同的 *指 *模块 *
姓名.要在该模块内获取 *类 *,请使用UTC.UTC-重试 *
口译员.要创建该类的新实例,您可以使用 *
UTC.UTC().要获得在UTC模块中已经创建的实例,请使用 *
UTC.UTC
**或者**
明确导入这些名称:
pyfrom utc导入UTC
在这种情况下,名称UTC指模块内的 *类 *.
在此特定示例中,它可能会令人困惑 - 两者都有相同的名称.
标准库中的另一个示例:Poplib模块CO ntains a *
POP3类,因此执行此行之后:
pyfrom poplib导入pop3
POP3的名称是指该类. Poplib模块本身不是 *
直接可用.
返回UTC模块,您可以使用:
pyfrom utc导入UTC
现在,UTC指的是在模块中已经创建的 *实例 *. *
在您的情况下,最后表格可能是最方便的:
Pyimport DateTime
pyfrom utc导入UTC
pyprint dateTime.DateTime(2008,7,7,14,20,30,0,0,0,UTC)
2008-07-14 20:30:00+00:00
- -
Gabriel Genellina

# 回答6


在消息中
<46***************************************************************************************************************************************************************遍ogleGroups.com>,Keith
休伊特写道:
1215734400
ldo@theontz = nz日期-D" 00:00:00 01-1770Z +1215734400秒"
星期五7月11日12:00:00 NZST 2008
呼叫的一般形式为" calendar.timegm((y,m,d,hh,mm,ss,0,0,
0,-1)).
另请参见,
.
我不喜欢使用MySQL的日期/时间类型.相反,我通常有一个
自UTC中的某个起源时间以来,简单整数字段包含秒数.如果
时间是某些事件,起源于1970年1月1日00:00:00让您
直接使用UNIX/Linux系统时间.用于记录日期/时间
回去(例如,出生日期,历史事件),我已经使用了
公元前4713年1月1日,朱利安·戴起源.
# 回答7


在2008-07-16 20:00,基思·休·希特(Keith Hughitt)写道:
使用绑定参数,它应该起作用:
查询="插入图像值(%d,%d,%s,'%s')"
cursor.execute(查询,(id,meas,date,'jpg'))
数据库接口通常不支持时区,所以我不是
当然,为什么添加时区使事情变得更加复杂
到日期/时间值.
Python中的导入语句的行为与其他语言中的相似阶段的行为不同 - 可能会使您感到困惑.我将尝试使用此示例来解释它. ITContains: - A *类 *定义(UTC)和 - and *实例 *该类的utc .----开始UTC.PY ---如果您将" TimeZone Aware" DateTime对象作为SQL ParameterClass UTC(tzinfo)(tzinfo) ):... utc = utc()...---------------------------------------------------------
在这里,您已导入 *模块 * UTC.也就是说,名称UTC现在refersto刚刚从utc.py文件加载的新创建的模块.
该错误来自UTC():UTC是一个模块,UTC()试图"调用"它,并且由于模块不是可呼叫的对象,因此我们会得到一个typeError.
到目前为止,我们已导入的 *仅 *名称是UTC-模块.小写utcis尚未定义.
与上面相同...好的,如何解决?我们知道UTC用Samename指 *模块 *.要在该模块内获取 *类 *,请使用UTC.UTC-在解释器中重试.要创建该类的新实例,您可以使用ututc.utc().要获取在UTC模块中已经创建的实例,请useutc.utc **或**明确导入这些名称:pyfrom utc utc import utcin utcin the utc utc the name the name the the Module. ular示例可能会令人困惑 - 两者都具有相同的名称.另一个示例来自标准库:Poplib模块包含APOP3类,因此在执行此行之后:Pyfrom Poplib import Pop3 the name pop3是指该类. poplib模块本身不是直接可用的.回到UTC模块,您可以使用:pyfrom utc import utcand现在UTC介绍了已在模块内创建的 *实例 *.这最后的表单可能是您的情况最方便的:Pyimport datetime from utc import utcpyppyprint dateTime.DateTime(2008,7,7,14,20,30,0,0,0,UTC)2008-07-14 20:30:00+00:00:00:00 - Gabriel Genellina

-http://mail.python.org/mailman/listinfo/python-list
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(#1,2008年7月17日)
______________________________________________________________________________________________________
::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld.首席执行官大队.马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611

# 回答8


在2008-07-17 22:43,丹尼斯·李·比伯(Dennis Lee Bieber)写道:
如果这是mySQLDB接口:
查询="插入图像值(%s,%s,%s,'%s')"
...只有%s有效;所有值已转换为逃脱/引用
在替换之前串起.
正确的.我忘了用%s代替%d.该行应该阅读:
查询="插入图像值(%s,%s,%s,%s)"
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(#1,2008年7月17日)
______________________________________________________________________________________________________
::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld.首席执行官大队.马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611
# 回答9


恩星期三,2008年7月16日15:00:50 -0300,基思·休·希特(Keith Hughitt)
总的来说,这不是一个好主意(除其他问题外:如果有任何文本怎么办
包含报价?听说过" SQL注入"?).改用此表格:
查询="插入图像值(%s,%s,%s,%s)"
cursor.execute(查询,(id,meas,date,'jpg'))
请注意,我到处都使用%s(只是占位符,而不是格式)和
执行方法收到两个参数,第二个是元组
包含所需值.
- -
Gabriel Genellina
# 回答10


在消息中,gabriel
Genellina写道:
来自/USR/lib64/python2.5/site-packages/mysqldb/cursors.py,第150-151行:
如果args不是没有:
查询=查询%db.literal(args)
# 回答11


在2008-07-18 05:28,丹尼斯·李·比伯(Dennis Lee Bieber)写道:
<提示啤酒商业>
不幸的是,就mysqldb而言...这两个都是 - 也许
MySQLDB放弃与MySQL 4.X的兼容性后,将改变
合并准备的用法 陈述代替Python%
插值.
当适配器首先转换为字符串,Escapes,
并引用论点;不管本机数据类型如何
当放入SQL语句时...
如果您喜欢不同的参数样式,则可以使用MXODBC
和MySQL ODBC驱动程序.
然后您写信:
查询="插入图像值(?,??,?,?)"
并避免由于看上去的参数样式而引起的任何混乱
很像Python字符串格式标记(对于明显
原因,因为那是MySQLDB模块内部使用的).
- -
马克·安德烈·伦堡
egenix.com
直接来自来源的专业Python服务(#1,2008年7月18日)
______________________________________________________________________________________________________
::::尝试MXODBC.ZOPE.DA Windows,Linux,Solaris,MacOSX免费! ::::
egenix.com软件,技能和服务GmbH Pastor-Loeh-Str.48
D-40764德国Langenfeld.首席执行官大队.马克·安德烈·伦堡
在Amtsgericht Duesseldorf注册:HRB 46611

标签: python

添加新评论