Python XlsxWriter 日期和时间


在 Excel 中,日期存储为实数,以便可以在计算中使用。默认情况下,1900 年 1 月 1 日(称为纪元)被视为 1,因此 2022 年 1 月 28 日对应于 44589。类似地,时间表示为数字的小数部分,即天的百分比。因此,2022 年 1 月 28 日 11.00 对应于 44589.45833。

Date Format

set_num_format() 方法


由于 Excel 中的日期或时间与任何其他数字一样,要将数字显示为日期,你必须对其应用 Excel 数字格式。利用 set_num_format() 使用适当格式的 Format 对象的方法。

以下代码片段以“dd/mm/yy”格式显示一个数字。

num = 44589
format1 = wb.add_format()
format1.set_num_format('dd/mm/yy')
ws.write('B2', num, format1)

num_format 参数


或者, 数字格式 参数 添加格式() 方法可以设置为所需的格式。

format1 = wb.add_format({'num_format':'dd/mm/yy'})
ws.write('B2', num, format1)

例子


以下代码以各种日期格式显示数字。

import xlsxwriter

wb = xlsxwriter.Workbook('hello.xlsx')
ws = wb.add_worksheet()

num=44589
ws.write('A1', num)

format2 = wb.add_format({'num_format': 'dd/mm/yy'})
ws.write('A2', num, format2)

format3 = wb.add_format({'num_format': 'mm/dd/yy'})
ws.write('A3', num, format3)

format4 = wb.add_format({'num_format': 'd-m-yyyy'})
ws.write('A4', num, format4)

format5 = wb.add_format({'num_format': 'dd/mm/yy hh:mm'})
ws.write('A5', num, format5)

format6 = wb.add_format({'num_format': 'd mmm yyyy'})
ws.write('A6', num, format6)

format7 = wb.add_format({'num_format': 'mmm d yyyy hh:mm AM/PM'})
ws.write('A7', num, format7)

wb.close()

输出


工作表在 Excel 软件中如下所示:

Num Format Parameter

write_datetime() 和 strptime()


XlsxWriter 的 Worksheet 对象也有 写日期时间() 在处理通过 Python 标准库的 datetime 模块获得的日期和时间对象时很有用的方法。

The 字符串时间() 方法返回 datetime 根据给定格式解析的字符串中的对象。下面给出了一些用于格式化字符串的代码:

%a

缩写的工作日名称

Sun, Mon

%A

完整的工作日名称

星期天星期一

%d

以零填充小数表示的月份中的日期

01, 02

%-d

以十进制数表示的月份中的日期

1, 2..

%b

缩写月份名称

Jan, Feb

%m

以零填充十进制数表示的月份

01, 02

%-m

以十进制数表示的月份

1, 2

%B

完整的月份名称

一月二月

%y

没有世纪的年份作为零填充十进制数

99, 00

%-y

没有世纪的年份作为十进制数

0, 99

%Y

以世纪为十进制数的年份

2022, 1999

%H

小时(24 小时制)作为零填充十进制数

01, 23

%-H

小时(24 小时制)作为十进制数

1, 23

%I

小时(12 小时制)作为零填充十进制数

01, 12

%-I

小时(12 小时制)作为十进制数

1, 12

%p

语言环境的 AM 或 PM

AM, PM

%M

分钟作为一个零填充十进制数

01, 59

%-M

分钟作为十进制数

1, 59

%S

秒作为零填充十进制数

01, 59

%-S

秒为十进制数

1, 59

%c

语言环境的适当日期和时间表示

2022 年 9 月 30 日星期一 07:06:05

The 字符串时间() 方法使用如下:

>>> from datetime import datetime
>>> dt="Thu February 3 2022 112022, 19995"
>>> code="%a %B %d %Y %H:%M:%S"
>>> datetime.strptime(dt, code)
datetime.datetime(2022, 2, 3, 11, 35, 5)

This datetime 现在可以将对象写入工作表 写日期时间() method.

例子


在以下示例中, datetime 对象以不同的格式编写。

import xlsxwriter
from datetime import datetime
wb = xlsxwriter.Workbook('hello.xlsx')
worksheet = wb.add_worksheet()

dt="Thu February 3 2022 112022, 19995"
code="%a %B %d %Y %H:%M:%S"
obj=datetime.strptime(dt, code)
date_formats = (
    'dd/mm/yy',
    'mm/dd/yy',
    'dd m yy',
    'd mm yy',
    'd mmm yy',
    'd mmmm yy',
    'd mmmm yyy',
    'd mmmm yyyy',
    'dd/mm/yy hh:mm',
    'dd/mm/yy hh:mm:ss',
    'dd/mm/yy hh:mm:ss.000',
    'hh:mm',
    'hh:mm:ss',
    'hh:mm:ss.000',
)
worksheet.write('A1', 'Formatted date')
worksheet.write('B1', 'Format')
row = 1

for fmt in date_formats:
    date_format = wb.add_format({'num_format': fmt, 'align': 'left'})
    worksheet.write_datetime(row, 0, obj, date_format)
    worksheet.write_string(row, 1, fmt)
    row += 1
wb.close()

输出


使用 Excel 打开时,工作表如下所示。

Datetime And Strptime