android - 如何使用 python 中的 GMT 增量从时间戳获取日期时间对象?

标签 android python datetime timezone timestamp

我目前正在使用一个 Android 应用程序收集时间戳,该应用程序为某些用户存储了时区,例如“GMT+03:00”,在线浏览时我发现这不是一个正确的时区,因此在尝试构建日期时间时python 中的对象使用

from datetime import datetime
from dateutil import tz
import pandas as pd
filename="data.csv"
data=pd.read_csv(filename)
[ datetime.fromtimestamp(data['timestamp'].iloc[i],
tz=tz.gettz(data['timezone'].iloc[i])) 
for i in range(data.shape[0]) ]

效果不佳。例如,使用该日期时间对象作为索引来创建 Pandas 数据框以使用滚动窗口功能是行不通的。知道如何将“GMT+03:00”转换为正确的时区或以某种方式合并该信息以正确构建日期时间对象吗?

更新: 以下是 data['timestamps'] 的示例:

[1520719558.0, 1520719558.0, 1520719558.0, 1520719558.0, 1520719561.0, 1520719561.0, 1520719561.0, 1520719561.0, 1520719562.0, 1520719562.0]

data['timezone'] 示例:

['GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00', 'GMT+03:00']

最佳答案

GMT 和 UTC 相同。您可以手动:编写一个函数来提取偏移量并返回一个datetime.timezone

import datetime, re
def get_tz(s):
    '''Returns a datetime.timezone object.

    Uses regular expression to extract the UTC offset from s.
    Assumes s is in the form of "GMT+03:00" or "GMT-03:00".
    Does NOT have exception handling.

    '''
    pattern = r'GMT([+-])(\d{1,2}):(\d{1,2})'
    match = re.match(pattern, s)
    sign, hh, mm = match.groups()
    hh, mm = map(int, (hh, mm))
    t_delta = datetime.timedelta(hours=hh, minutes=mm)
    t_delta = t_delta * (1 if sign == '+' else -1)
    return datetime.timezone(t_delta)

用法:

>>> timestamp = 1520719558.0
>>> timezone = 'GMT+03:00'
>>> dt = datetime.datetime.fromtimestamp(timestamp, get_tz(timezone))
>>> dt.isoformat()
'2018-03-11T01:05:58+03:00'
>>> timezone = 'GMT-03:00'
>>> dt = datetime.datetime.fromtimestamp(timestamp, get_tz(timezone))
>>> dt.isoformat()
'2018-03-10T19:05:58-03:00'

关于android - 如何使用 python 中的 GMT 增量从时间戳获取日期时间对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323899/

相关文章:

python - Django haystack LocationField 在 elasticsearch 中创建为字符串而不是 geo_point

python - 从 R 或 Python 中的列中获取经常出现的字符串模式

python - pandas.DataFrame.load/python2 和 python3 之间的保存 : pickle protocol issues

java - 从尊重时区的日历对象中获取格式化字符串的最简单方法是什么?

javascript - 在 Javascript 中设置日期格式

Python - 遍历属性列表

Android Studio 3.3 卡在项目设置 :reading from cache

java - Android - SeekBar NullPointEreException - 我不知道为什么。

android - 升级到 Unity 5 后 res/raw 中的 Android 库插件 .js 文件出现问题

android - WifiDirect .discoverPeers经常忙或出错