没有零填充的 Python 日期时间格式

2025-03-10 08:49:00
admin
原创
36
摘要:问题描述:是否存在一种用于打印 Python 日期时间的格式,不会在日期和时间上使用零填充?我现在使用的格式:mydatetime.strftime('%m/%d/%Y %I:%M%p') 结果: 2012 年 2 月 29 日下午 5:03 期望时间: 2012 年 2 月 29 日下午 5:03什么格式...

问题描述:

是否存在一种用于打印 Python 日期时间的格式,不会在日期和时间上使用零填充?

我现在使用的格式:

mydatetime.strftime('%m/%d/%Y %I:%M%p')

结果: 2012 年 2 月 29 日下午 5:03

期望时间: 2012 年 2 月 29 日下午 5:03

什么格式可以将月份表示为“2”而不是“02”,将时间表示为“5:03PM”而不是“05:03PM”


解决方案 1:

避免上述“全或无”前导零的另一种方法是在字段类型前面放置一个减号:

mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

然后是:‘2015 年 4 月 10 日凌晨 3 点’

变为:‘4/10/2015 3:00AM’

如果需要的话,您可以选择在日期前面放置一个减号。

编辑:减号功能源自 GNU C 库(“glibc”),如Linux strftime 手册页中的“Glibc 注释”中所述

解决方案 2:

新的字符串格式化系统提供了 的替代方案strftime。它非常易读——事实上,strftime从这个角度来看,它可能比 更可取。更不用说它不使用零填充的事实了:

>>> '{d.month}/{d.day}/{d.year}'.format(d=datetime.datetime.now())
'3/1/2012'

由于您可能希望在分钟字段中添加零,因此您可以这样做:

>>> '{d.month}/{d.day}/{d.year} {d.hour}:{d.minute:02}'.format(d=now)
'3/1/2012 20:00'

如果您想要“常规”时间而不是“军事”时间,您仍然可以使用标准strftime说明符。为了方便起见,我们strftime 确实提供了一个 12 小时时间的代码,其中填充了空格而不是前导零:

'{d.month}/{d.day}/{d.year} {d:%l}:{d.minute:02}{d:%p}'.format(d=now)
'4/4/2014  6:00PM'

可惜,这变得可读性较差。正如 @mlissner 指出的那样,strftime在某些(所有?)平台上,对于 1900 年之前的日期,它将失败。

解决方案 3:

可用的格式化选项datetime.strftime()将全部使用零填充。当然,您可以自行制定格式化函数,但在这种情况下,最简单的解决方案可能是对结果进行后处理datetime.strftime()

s = mydatetime.strftime('%m/%d/%Y %I:%M%p').lstrip("0").replace(" 0", " ")

解决方案 4:

接受的答案不是一个正确的解决方案(IMHO)正确的记录方法:

在 Linux 中,“#” 被替换为“-”:

%-d,%-H,%-I,%-j,%-m,%-M,%-S,%-U,%-w,%-W,%-y,%-Y

在 Windows 中“-”被替换为“#”:

%#d,%#H,%#I,%#j,%#m,%#M,%#S,%#U,%#w,%#W,%#y,%#Y

#Linux
mydatetime.strftime('%-m/%d/%Y %-I:%M%p')

# Windows
mydatetime.strftime('%#m/%d/%Y %#I:%M%p')

来源:https://msdn.microsoft.com/en-us/library/fe06s4ak.aspx

正如 Sagneta 所述:Windows 上的 # hash 技巧仅适用于本机 python 可执行文件。这对基于 cygwin 的 python 实现不起作用。

解决方案 5:

Chris Freeman 对 Linux 给出了很好的回答。

在 Windows 上,它是:

mydate.strftime('%#m/%#d/%Y')

解决方案 6:

另一个选择:

yourdatetime.strftime('%-m/%-d/%Y %-I:%M%p')

解决方案 7:

正如其他几个人提到的那样,要忽略 Windows 上的前导零,您必须使用%#d而不是%-d

对于那些喜欢编写干净的跨平台 Python 代码,而不想在业务逻辑中看到平台切换的人来说,这里有一个Python3帮助程序,可以让你为 Windows、Linux 和其他平台(测试过的 Linux、Windows 和 FreeBSD)使用一个格式字符串:

import os
from datetime import datetime

def dateToStr(d: datetime, fmt: str) -> str:
    return d.strftime(fmt.replace('%-', '%#') if os.name == 'nt' else fmt)

dateToStr(datetime.now(), '%-m/%-d/%-Y')

顺便说一句,这是 Python 中的另一个功能Whaaaaaaaat?。我不明白为什么他们没有为所有平台创建标准格式集并添加可选的“use_native”标志以使用本机平台功能。猜测这是一个早期的设计决定,必须保留以支持遗留系统。

解决方案 8:

“%l”(小写的 L)用于表示小时(而不是“%I”)。我只是从另一个答案中知道这一点

Python strftime - 没有前导 0 的日期?

但不幸的是,他们没有日期/时间的其他元素的代码。

解决方案 9:

我用的是这个:

D = str(datetime.now().day)
MM = str(datetime.now().month)
YYYY = str(datetime.now().year)

今天将返回:2021 年 12 月 2 日

解决方案 10:

在官方文档格式化部分:

  1. 与 strptime() 方法一起使用时,格式 %d、%m、%H、%I、%M、%S、%J、%U、%W 和 %V 的前导零是可选的。格式 %y 需要前导零。

因此,使用%d来解析数字中的天数将自动解析07& 7

解决方案 11:

我第一次遇到这个问题,因为我以前大部分开发工作都是在 Linux 上完成的。这是我在 Python 3.8+ 上实现的简单跨平台方法的解决方案

from typing import AnyStr

import os

def unistrfmt(fmt: AnyStr) -> AnyStr:
    return fmt.replace(('%#', '%-')[os.name == 'nt'], ('%-', '%#')[os.name == 'nt'])

# Examples:

from datetime import date
date.today().strftime(unistrfmt("%Y.%m.%-d"))
# '2024.02.1'
os.name
#'nt'
unistrfmt("%Y.%m.%-d")
# '%Y.%m.%#d'
unistrfmt("%Y.%m.%#d")
# '%Y.%m.%#d'

解决方案 12:

在格式描述符前面添加 # 以删除零填充:

mydatetime.strftime('%#m/%d/%Y %#I:%M%p')
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1887  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1425  
  在制造业数字化转型的进程中,PLM(产品生命周期管理)系统、ERP(企业资源计划)系统、MES(制造执行系统)以及 CAD(计算机辅助设计)软件都扮演着至关重要的角色。然而,这些系统和软件各自独立运行时,往往难以发挥出最大的协同效应。实现 PLM 系统与 ERP、MES、CAD 的有效集成,成为提升企业整体竞争力、优化...
plm系统的主要功能模块   3  
  产品生命周期管理(PLM)作为一种先进的管理理念和技术,在电子与半导体行业正发挥着日益重要的作用。随着电子与半导体行业的快速发展,产品更新换代速度加快,市场竞争愈发激烈,企业面临着诸多挑战,如缩短产品上市时间、提高产品质量、降低成本等。而PLM的应用为企业应对这些挑战提供了有效的解决方案,展现出巨大的应用价值。提升产品...
plm项目   4  
  PLM(产品生命周期管理)项目管理软件在现代企业的产品研发、生产与运营中扮演着至关重要的角色。它整合了从产品概念设计到退役的全流程数据与流程,助力企业提升效率、降低成本并增强创新能力。随着科技的飞速发展以及企业需求的不断演变,未来十年 PLM 项目管理软件的发展充满了无限可能,值得深入探讨与预测。智能化与自动化趋势智能...
plm产品全生命周期管理   6  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用