好的,这是对这个问题的看法。 CASSANDRA-10000解决了Windows中日期格式设置的一些问题。但是,由于每个平台都有自己的方式来跟踪时区偏移量,因此很难让cqlsh在Windows中工作,而不包括用于时区显示的其他依赖项。因此选择了阻力最小的路径,现在所有平台都以UTC显示查询的时间戳。
我打算创建一个JIRA票据来解决这个问题,并为两个环境获得适当的时区显示(希望)。
使用此修补AT您自行承担
如果你觉得舒服尝试它,这里是我是如何解决这个我自己:
在$CASSANDRA_HOME/pylib/cqlshlib/formatting.py
,寻找strftime
方法定义。新的一个(如2.2.1)只包含两行:
def strftime(time_format, seconds):
tzless_dt = datetime_from_timestamp(seconds)
return tzless_dt.replace(tzinfo=UTC()).strftime(time_format)
你可以清楚地看到UTC时区被强制在哪里。基本上,只是注释掉(或删除)这些行,并用Cassandra的strftime
方法定义替换它们= < =(2.2.0 || 2.1.8)。如果你没有的话,这里是代码:
def strftime(time_format, seconds):
local = time.localtime(seconds)
formatted = time.strftime(time_format, local)
if local.tm_isdst != 0:
offset = -time.altzone
else:
offset = -time.timezone
if formatted[-4:] != '0000' or time_format[-2:] != '%z' or offset == 0:
return formatted
# deal with %z on platforms where it isn't supported. see CASSANDRA-4746.
if offset < 0:
sign = '-'
else:
sign = '+'
hours, minutes = divmod(abs(offset)/60, 60)
return formatted[:-5] + sign + '{0:0=2}{1:0=2}'.format(hours, minutes)
我已经测试此代码与上面的情况,但肯定不是一个详尽的水平。就像我说的那样,使用风险自负。但是这应该阻止你直到一个补丁被写入来恢复这个功能。
编辑20161021
这是固定在CASSANDRA-10397为2.2.6版本,3.0.4和3.4。
你正在运行哪个版本的Cassandra? 2.2.1偶然? – Aaron
嗨亚伦。是的,我正在运行2.2.1。我也试过版本2.1.9,我也可以在版本2.1.9上重现这个问题。这是一个错误? – srai
我这么认为。 Python格式化库从上一个发行版发生了变化(考虑到Windows时间格式),并且TZ偏移量现在在Bash中为零。我会在飞回家的时候看看它,为它创建一个JIRA,并且(希望)会有一个补丁。 – Aaron