cqlsh: fix timestamp formatting for tz info Patch by Aleksey Yeschenko, reviewed by brandonwilliams for CASSANDRA-4746
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/afd95c10 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/afd95c10 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/afd95c10 Branch: refs/heads/trunk Commit: afd95c1062636c31528551e5f424d8eba8f1b916 Parents: 0712c66 Author: Brandon Williams <[email protected]> Authored: Fri Oct 26 08:45:27 2012 -0500 Committer: Brandon Williams <[email protected]> Committed: Fri Oct 26 08:45:27 2012 -0500 ---------------------------------------------------------------------- bin/cqlsh | 18 ++++++++++++++++-- 1 files changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/afd95c10/bin/cqlsh ---------------------------------------------------------------------- diff --git a/bin/cqlsh b/bin/cqlsh index 22edde6..1220c61 100755 --- a/bin/cqlsh +++ b/bin/cqlsh @@ -489,8 +489,22 @@ def format_value(val, casstype, output_encoding, addcolor=False, time_format='', elif casstype in ('DateType', 'TimeUUIDType'): if casstype == 'TimeUUIDType': val = unix_time_from_uuid1(val) - timestamp = time.localtime(val) - bval = time.strftime(time_format, timestamp) + local = time.localtime(val) + 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: + bval = formatted + else: + # 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) + bval = formatted[:-5] + sign + '{0:0=2}{1:0=2}'.format(hours, minutes) color = colormap['timestamp'] elif casstype in ('LongType', 'Int32Type', 'IntegerType', 'CounterColumnType'): # base-10 only for now; support others?
