如何在Python脚本中调用外部命令(就像我在Unix shell或Windows命令提示符下键入它一样)?
我有一个使用datetime.utcnow()创建并保存在数据库中的python datetime实例.
为了显示,我想使用默认的本地时区将从数据库检索的日期时间实例转换为本地日期时间(即,就像使用datetime.now()创建日期时间一样).
如何仅使用python标准库将UTC日期时间转换为本地日期时间(例如,没有pytz依赖项)?
似乎一个解决方案是使用datetime.astimezone(tz),但是如何获得默认的本地时区?
我想将日志文件中的UTC时间戳与本地时间戳进行比较.在创建本地datetime对象时,我使用如下内容:
>>> local_time=datetime.datetime(2010, 4, 27, 12, 0, 0, 0,
tzinfo=pytz.timezone('Israel'))
Run Code Online (Sandbox Code Playgroud)
我想找到一个自动工具来取代tzinfo=pytz.timezone('Israel')当前的本地时区.
有任何想法吗?
我们可以使用time.tzname获取本地时区名称,但该名称与之不兼容pytz.timezone.
实际上,返回的名称time.tzname含糊不清.此方法('CST', 'CST')在我的系统中返回,但"CST"可以指示四个时区:
我正在运行一个从远程服务器请求海潮数据的程序.在time和date基于我的机器的本地时区,这股潮流的数据被计算.我想使用这些本地日期和时间来创建一个datetime对象,然后我将保存在Django模型中.
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute)
Run Code Online (Sandbox Code Playgroud)
在将datetime对象发布到Django之前,如何确保对象知道它是基于本地时区创建的?
我想,在发布之前我希望它看起来像这样:
datetime_obj = datetime(loc_year, loc_month, loc_date, loc_hour, loc_minute, loc_timezone)
Run Code Online (Sandbox Code Playgroud)
如何动态获取机器的本地时区?以及如何确保所有用户都将时间转换为他们自己的本地时区.
我试图自动获取本地时区偏移但是遇到了麻烦.我试过了:
print time.timezone/3600
Run Code Online (Sandbox Code Playgroud)
这会得到(当前错误的)偏移,因为它不会自动调整夏令时和非夏令时.
我也尝试过:
now_utc = pytz.utc.localize(datetime.datetime.now())
now_mst = now_utc.astimezone(pytz.timezone('US/Mountain'))
Run Code Online (Sandbox Code Playgroud)
这会得到正确的偏移值,但我想自动设置'US/Mountain'部分,所以我不必手动输入任何东西来获得偏移量.
有没有办法获得正确的偏移量,可以自动调整DST和非DST?
我将在不同地理位置的多台服务器上运行此脚本,如果可以,我想自动获取tz偏移量.
在Windows python环境中,我可以像这样得到本地时区,但它不适用于pytz:
>>> import win32timezone
>>> win32timezone.TimeZoneInfo.local()
TimeZoneInfo(u'US Mountain Standard Time', True)
>>> win32timezone.TimeZoneInfo.local().timeZoneName
u'US Mountain Standard Time'
>>> tz = pytz.timezone(win32timezone.TimeZoneInfo.local().timeZoneName)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\pytz\__init__.py", line 185, in timezone
raise UnknownTimeZoneError(zone)
pytz.exceptions.UnknownTimeZoneError: 'US Mountain Standard Time'
Run Code Online (Sandbox Code Playgroud)
将输出转换为时区名称pytz.timezone()的好方法是什么?
这是答案tzlocal(感谢Matt):
>>> from tzlocal.win32 import get_localzone_name
>>> get_localzone_name()
'America/Phoenix'
>>> tz = pytz.timezone(get_localzone_name())
>>> tz
<DstTzInfo 'America/Phoenix' MST-1 day, 17:00:00 STD>
Run Code Online (Sandbox Code Playgroud) 我需要生成要向用户显示的时区列表。我们希望根据用户的区域设置缩小列表范围。
如果用户的区域设置为“en_US”,他可能不关心在列表中看到“Asia/Ashkhabad”。
这是可行的吗?