鱼C论坛

 找回密码
 立即注册
查看: 2376|回复: 5

[已解决]python将excel中自定义的时间格式转换为文本格式保持显示不变,但分丢失了

[复制链接]
发表于 2023-3-20 20:47:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
       print(data[i][2])
                dt_time = time.localtime(data[i][2])
                print(dt_time)
                print(type(dt_time))
                time_str = time.strftime('%H:%M',dt_time)
                print(time_str)
                data[i][2] = time_str
                print(data[i][2])
结果如下:
0.2923611111111111
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
<class 'time.struct_time'>
08:00
08:00
0.30625
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
<class 'time.struct_time'>
08:00
08:00
0.3215277777777778
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
<class 'time.struct_time'>
08:00
08:00
0.3347222222222222
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
<class 'time.struct_time'>
08:00
08:00

查了一下百度说的是可能丢失秒以下的,但我这个丢失的是分。
最佳答案
2023-3-20 21:18:27
帅昊昊昊 发表于 2023-3-20 21:01
这个分的问题解决了,但是时  上差了8个小时,这个怎么解决呀

这可能是时区问题,可以自己加上 8 小时
import time

data = [
    [0, 0, 0.2923611111111111],
    [0, 0, 0.30625],
    [0, 0, 0.3215277777777778],
    [0, 0, 0.3347222222222222]
]

for i in range(len(data)):
    print(data[i][2])
    # 将Excel中的小数时间转换为时间戳(秒)
    timestamp = data[i][2] * 24 * 3600 + 8 * 3600                   # 这里加上了 8 * 3600 秒,也就是 8 小时
    dt_time = time.localtime(timestamp)
    print(dt_time)
    print(type(dt_time))
    time_str = time.strftime('%H:%M', dt_time)
    print(time_str)
    data[i][2] = time_str
    print(data[i][2])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-20 20:56:23 | 显示全部楼层
在你的代码中,你将Excel中的时间数据视为从1970年1月1日以来的时间戳。这里的问题是,Excel中的时间是以天为单位的小数表示。因此,你需要将这个小数值乘以24小时、3600秒来将其转换为时间戳,然后再使用time.localtime函数。

这里是修改后的代码:
import time

data = [
    [0, 0, 0.2923611111111111],
    [0, 0, 0.30625],
    [0, 0, 0.3215277777777778],
    [0, 0, 0.3347222222222222]
]

for i in range(len(data)):
    print(data[i][2])
    # 将Excel中的小数时间转换为时间戳(秒)
    timestamp = data[i][2] * 24 * 3600
    dt_time = time.localtime(timestamp)
    print(dt_time)
    print(type(dt_time))
    time_str = time.strftime('%H:%M', dt_time)
    print(time_str)
    data[i][2] = time_str
    print(data[i][2])

现在,你应该能够看到正确的分钟数。注意,这种方法可能会丢失秒以下的精度,但对于大多数情况应该是足够的。如果你需要更高的精度,你可以尝试将时间戳保留到毫秒级别。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-20 21:01:09 | 显示全部楼层
isdkz 发表于 2023-3-20 20:56
在你的代码中,你将Excel中的时间数据视为从1970年1月1日以来的时间戳。这里的问题是,Excel中的时间是以天 ...

这个分的问题解决了,但是时  上差了8个小时,这个怎么解决呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-20 21:18:27 | 显示全部楼层    本楼为最佳答案   
帅昊昊昊 发表于 2023-3-20 21:01
这个分的问题解决了,但是时  上差了8个小时,这个怎么解决呀

这可能是时区问题,可以自己加上 8 小时
import time

data = [
    [0, 0, 0.2923611111111111],
    [0, 0, 0.30625],
    [0, 0, 0.3215277777777778],
    [0, 0, 0.3347222222222222]
]

for i in range(len(data)):
    print(data[i][2])
    # 将Excel中的小数时间转换为时间戳(秒)
    timestamp = data[i][2] * 24 * 3600 + 8 * 3600                   # 这里加上了 8 * 3600 秒,也就是 8 小时
    dt_time = time.localtime(timestamp)
    print(dt_time)
    print(type(dt_time))
    time_str = time.strftime('%H:%M', dt_time)
    print(time_str)
    data[i][2] = time_str
    print(data[i][2])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-20 21:29:09 | 显示全部楼层
isdkz 发表于 2023-3-20 21:18
这可能是时区问题,可以自己加上 8 小时

dt_time = time.localtime(data[i][2]*24*3600+16*3600)
我一个一个试的,反正我不看天数,所以要+16才行,是不是等价于-8呀,但是我之前试过-8报错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-20 21:32:34 | 显示全部楼层
帅昊昊昊 发表于 2023-3-20 21:29
dt_time = time.localtime(data[2]*24*3600+16*3600)
我一个一个试的,反正我不看天数,所以要+16才行, ...

天数不看的话确实加16跟 减8没区别,如果看天数的话就得考虑考虑了,是少了 16 个小时,还是多了 8 个小时
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表