---
title: "python中时间那些事儿"
url: "https://lerry.me/post/2012/03/time-convert-in-python"
date: 2012-03-27T13:52:00.000Z
updated: 2026-08-31T09:37:52.264Z
tags:
  - "Python"
  - "time"
language: zh-CN
---

# python中时间那些事儿

今天在弄个程序，从MSSQLServer读取部分数据，然后存储到sqlite，还有前一段时间转换数据库时都 遇到了时间的转换问题，这里就把常用的几个时间日期转换函数列出来，说一下用法，也算是复习用法

首先要知道，数据库中存储时间有多种形式，我用过的：

使用**datetime.datetime.now()**，如：2012-03-27 22:32:49.560165 优点： 直观易读 缺点： 存储占用空间大 比较大小、排序不便 使用**time.mktime(time.localtime())**，如1332859349.0，表示从0时区的1970年1月1日，0时整以来的秒数（epoch）。  
因为那一刻是UNIX元年开始的时间。 优点： 存储占用空间小 排序方便 缺点 不直观，无法看一眼就理解

综合来看，我倾向于使用第二种方法，因为它的缺点可以避免，谁没事直接去数据库？会看数据库的人估计也会转换的。 得到时间和日期之后要说说怎么转换。

无论怎么转换，都需要现转换成9-item sequence，即一个九项的序列

#### 从格式化时间转换成epoch

比如把2012-03-27 22:32:49.560165转换成秒数，使用 **time.mktime()**， 但是这个函数接受的参数为9-item sequenc。必须先进行转换，使用**time.strptime()**, 进行反格式化，  
**time.strptime('2012-03-27 22:32:49.560165'\[:19\], '%Y-%m-%d %H:%M:%S')**  
然后，将结果带入time.mktime()即可得到1332858769.0

#### 从epoch转换成格式化时间

首先转换成9-item sequence，使用 **time.localtime()**  
**time.localtime(1332858769.0)**  
得到9-item sequence以后，使用 **time.strftime()**进行格式化，  
**time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1332858769.0))**  
最终得到2012-03-27 22:32:49
