鱼C论坛

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

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

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

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

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

x
  1.        print(data[i][2])
  2.                 dt_time = time.localtime(data[i][2])
  3.                 print(dt_time)
  4.                 print(type(dt_time))
  5.                 time_str = time.strftime('%H:%M',dt_time)
  6.                 print(time_str)
  7.                 data[i][2] = time_str
  8.                 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 小时

  1. import time

  2. data = [
  3.     [0, 0, 0.2923611111111111],
  4.     [0, 0, 0.30625],
  5.     [0, 0, 0.3215277777777778],
  6.     [0, 0, 0.3347222222222222]
  7. ]

  8. for i in range(len(data)):
  9.     print(data[i][2])
  10.     # 将Excel中的小数时间转换为时间戳(秒)
  11.     timestamp = data[i][2] * 24 * 3600 + 8 * 3600                   # 这里加上了 8 * 3600 秒,也就是 8 小时
  12.     dt_time = time.localtime(timestamp)
  13.     print(dt_time)
  14.     print(type(dt_time))
  15.     time_str = time.strftime('%H:%M', dt_time)
  16.     print(time_str)
  17.     data[i][2] = time_str
  18.     print(data[i][2])
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这里是修改后的代码:

  1. import time

  2. data = [
  3.     [0, 0, 0.2923611111111111],
  4.     [0, 0, 0.30625],
  5.     [0, 0, 0.3215277777777778],
  6.     [0, 0, 0.3347222222222222]
  7. ]

  8. for i in range(len(data)):
  9.     print(data[i][2])
  10.     # 将Excel中的小数时间转换为时间戳(秒)
  11.     timestamp = data[i][2] * 24 * 3600
  12.     dt_time = time.localtime(timestamp)
  13.     print(dt_time)
  14.     print(type(dt_time))
  15.     time_str = time.strftime('%H:%M', dt_time)
  16.     print(time_str)
  17.     data[i][2] = time_str
  18.     print(data[i][2])
复制代码


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

使用道具 举报

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

这个分的问题解决了,但是时  上差了8个小时,这个怎么解决呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  1. import time

  2. data = [
  3.     [0, 0, 0.2923611111111111],
  4.     [0, 0, 0.30625],
  5.     [0, 0, 0.3215277777777778],
  6.     [0, 0, 0.3347222222222222]
  7. ]

  8. for i in range(len(data)):
  9.     print(data[i][2])
  10.     # 将Excel中的小数时间转换为时间戳(秒)
  11.     timestamp = data[i][2] * 24 * 3600 + 8 * 3600                   # 这里加上了 8 * 3600 秒,也就是 8 小时
  12.     dt_time = time.localtime(timestamp)
  13.     print(dt_time)
  14.     print(type(dt_time))
  15.     time_str = time.strftime('%H:%M', dt_time)
  16.     print(time_str)
  17.     data[i][2] = time_str
  18.     print(data[i][2])
复制代码
小甲鱼最新课程 -> https://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报错了
小甲鱼最新课程 -> https://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 个小时
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 22:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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