简短而简单。我有一个巨大的日期时间列表,像这样的字符串:
2005年6月1日下午1:331999年8月28日12:00 AM
我将把它们推回到数据库中的正确日期时间字段中,所以我不知道
我已经组建了一个可以转换一些非常简洁的表达式的项目。查看 的 TIMESTRING 强> 。
pip install timestring
>>> import timestring >>> timestring.Date('monday, aug 15th 2015 at 8:40 pm') <timestring.Date 2015-08-15 20:40:00 4491909392> >>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date datetime.datetime(2015, 8, 15, 20, 40) >>> timestring.Range('next week') <timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880> >>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date) (datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))
emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv") emp.info()
它显示“开始日期时间”列和“上次登录时间”都是数据框中的“对象=字符串”
<class 'pandas.core.frame.DataFrame'> RangeIndex: 1000 entries, 0 to 999 Data columns (total 8 columns): First Name 933 non-null object Gender 855 non-null object
Start Date 1000 non-null object Last Login Time 1000 non-null object
Salary 1000 non-null int64 Bonus % 1000 non-null float64 Senior Management 933 non-null object Team 957 non-null object dtypes: float64(1), int64(1), object(6) memory usage: 62.6+ KB
通过使用 parse_dates 选项 read_csv 提到你可以将你的字符串日期时间转换为pandas日期时间格式。
parse_dates
read_csv
emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv", parse_dates=["Start Date", "Last Login Time"]) emp.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 1000 entries, 0 to 999 Data columns (total 8 columns): First Name 933 non-null object Gender 855 non-null object
Start Date 1000 non-null datetime64[ns] Last Login Time 1000 non-null datetime64[ns]
Salary 1000 non-null int64 Bonus % 1000 non-null float64 Senior Management 933 non-null object Team 957 non-null object dtypes: datetime64[ns](2), float64(1), int64(1), object(4) memory usage: 62.6+ KB
如果您只想要日期格式,那么您可以通过传递以下各个字段来手动转换它:
>>> import datetime >>> date = datetime.date(int('2017'),int('12'),int('21')) >>> date datetime.date(2017, 12, 21) >>> type(date) <type 'datetime.date'>
您可以传递拆分字符串值以将其转换为日期类型,如:
selected_month_rec = '2017-09-01' date_formate = datetime.date(int(selected_month_rec.split('-')[0]),int(selected_month_rec.split('-')[1]),int(selected_month_rec.split('-')[2]))
您将以日期格式获得结果值。
datetime.strptime 是将字符串解析为日期时间的主要例程。它可以处理各种格式,格式由您提供的格式字符串确定:
datetime.strptime
from datetime import datetime datetime_object = datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
所结果的 datetime 对象是时区天真的。
datetime
链接:
Python文档 strptime : Python 2 , Python 3
strptime
Python文档 strptime / strftime 格式字符串: Python 2 , Python 3
strftime
strftime.org 对于strftime来说,这也是一个非常好的参考
笔记:
看到 我的答案 。
在实际数据中,这是一个真正的问题:多个,不匹配,不完整,不一致和多语言/区域日期格式,通常在一个数据集中自由混合。生产代码失败并不好,更不用说像狐狸一样快乐。
我们需要尝试...捕获多个日期时间格式fmt1,fmt2,...,fmtn并抑制/处理异常(来自 strptime() )对于所有那些不匹配的人(特别是,避免需要一个yukky n-deep缩进的try..catch子句)。从 我的解决方案
strptime()
def try_strptime(s, fmts=['%d-%b-%y','%m/%d/%Y']): for fmt in fmts: try: return datetime.strptime(s, fmt) except: continue return None # or reraise the ValueError if no format matched, if you prefer
Django时区感知日期时间对象示例。
import datetime from django.utils.timezone import get_current_timezone tz = get_current_timezone() format = '%b %d %Y %I:%M%p' date_object = datetime.datetime.strptime('Jun 1 2005 1:33PM', format) date_obj = tz.localize(date_object)
对于Django和Python,这种转换非常重要 USE_TZ = True :
USE_TZ = True
RuntimeWarning: DateTimeField MyModel.created received a naive datetime (2016-03-04 00:00:00) while time zone support is active.
您可以使用 easy_date 让它变得简单:
import date_converter converted_date = date_converter.string_to_datetime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
在Python&gt; = 3.7.0中,
转换 的 YYYY-MM-DD字符串到datetime对象 强> , datetime.fromisoformat 可用于。
datetime.fromisoformat
>>> from datetime import datetime >>> date_string = "2012-12-12 10:10:10" >>> print (datetime.fromisoformat(date_string)) >>> 2012-12-12 10:10:10
使用第三方 dateutil 图书馆:
from dateutil import parser dt = parser.parse("Aug 28 1999 12:00AM")
它可以处理大多数日期格式,包括您需要解析的格式。它比strptime更方便,因为它可以在大多数时间猜测正确的格式。
它对于编写测试非常有用,其中可读性比性能更重要。
你可以安装它:
pip install python-dateutil
In [34]: import datetime In [35]: _now = datetime.datetime.now() In [36]: _now Out[36]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000) In [37]: print _now 2016-01-19 09:47:00.432000 In [38]: _parsed = datetime.datetime.strptime(str(_now),"%Y-%m-%d %H:%M:%S.%f") In [39]: _parsed Out[39]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000) In [40]: assert _now == _parsed
的 for unix / mysql格式2018-10-15 20:59:29 强>
from datetime import datetime datetime_object = datetime.strptime('2018-10-15 20:59:29', '%Y-%m-%d %H:%M:%S')