| OLD | NEW |
| (Empty) |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 | |
| 6 """Provides functions for parsing and outputting Zulu time.""" | |
| 7 | |
| 8 import datetime | |
| 9 import pytz | |
| 10 | |
| 11 from infra_libs.time_functions import timestamp | |
| 12 | |
| 13 | |
| 14 def parse_zulu_time(string): | |
| 15 """Parses a Zulu time string, returning None if unparseable.""" | |
| 16 | |
| 17 # Ugh https://bugs.python.org/issue19475. | |
| 18 zulu_format = "%Y-%m-%dT%H:%M:%S" | |
| 19 if '.' in string: | |
| 20 zulu_format += ".%f" | |
| 21 zulu_format += "Z" | |
| 22 try: | |
| 23 return datetime.datetime.strptime(string, zulu_format) | |
| 24 except ValueError: | |
| 25 return None | |
| 26 | |
| 27 | |
| 28 def parse_zulu_ts(string): | |
| 29 """Parses Zulu time and converts into a timestamp or None.""" | |
| 30 zuluparse = parse_zulu_time(string) | |
| 31 if zuluparse is None: | |
| 32 return None | |
| 33 return timestamp.utctimestamp(zuluparse) | |
| 34 | |
| 35 | |
| 36 def to_zulu_string(dt): | |
| 37 """Returns a Zulu time string from a datetime. | |
| 38 | |
| 39 Assumes naive datetime objects are in UTC. | |
| 40 Ensures the output always has a floating-point number of seconds. | |
| 41 """ | |
| 42 | |
| 43 # Assume non-tz-aware datetimes are in UTC. | |
| 44 if dt.tzinfo is None or dt.tzinfo.utcoffset(dt) is None: | |
| 45 dt = dt.replace(tzinfo=pytz.UTC) | |
| 46 | |
| 47 # Convert datetime into UTC. | |
| 48 isodate = dt.astimezone(pytz.UTC).isoformat().split('+')[0] | |
| 49 | |
| 50 # Add fractional seconds if not present. | |
| 51 if '.' not in isodate: | |
| 52 isodate += '.0' | |
| 53 | |
| 54 return isodate + 'Z' | |
| OLD | NEW |