如何移除datetime字符串时区附加信息或避免其生成?
解决方法:无需字符串分割,直接从datetime对象层面处理
嘿,我刚好碰到过类似的需求,完全不用靠字符串分割这种“事后补救”的方法,有两种更优雅的方式可以在生成字符串时就避免时区偏移部分:
方法1:用strftime()自定义输出格式
这是最灵活的方法,你可以直接指定想要的日期时间格式,完全控制输出内容。strftime()支持各种格式符,其中%Y-%m-%d %H:%M:%S刚好对应你想要的年-月-日 时:分:秒格式,不会包含时区信息。
修改你的代码最后一行即可:
ind.astimezone(indian).strftime('%Y-%m-%d %H:%M:%S')
这样输出就是纯日期时间字符串:'2019-07-30 16:32:04',完全符合你的要求。
方法2:移除datetime对象的时区信息后转字符串
如果你只是想快速去掉时区偏移,可以把转换后的带时区datetime对象的tzinfo设为None,这样它就变成一个“无时区感知”的datetime对象,默认的__str__()方法就不会输出时区部分了。
代码示例:
ind.astimezone(indian).replace(tzinfo=None, microsecond=0).__str__()
执行后同样会得到'2019-07-30 16:32:04'的结果。
为什么这两种方法更好?
和字符串分割相比,这两种方法都是从datetime对象本身处理,更可靠也更符合Python的最佳实践:
- 不会因为时区格式的变化(比如不同系统的时区表示差异)导致分割失败;
- 代码可读性更强,一眼就能看出你是要格式化时间,还是要移除时区信息。
完整的测试代码:
from datetime import datetime import dateutil.tz as tz utc = datetime.utcnow() UTC = tz.gettz('UTC') indian = tz.gettz('Asia/Kolkata') ind = utc.replace(tzinfo=UTC) # 方法1输出 print(ind.astimezone(indian).strftime('%Y-%m-%d %H:%M:%S')) # 方法2输出 print(ind.astimezone(indian).replace(tzinfo=None, microsecond=0).__str__())
内容的提问来源于stack exchange,提问作者piyush daga
相关产品推荐
相关产品推荐

