Ik zie veel over het converteren van een datumtekenreeks naar een datetime
-object in Python, maar ik wil de andere kant op.
Ik heb
datetime.datetime(2012, 2, 23, 0, 0)
en ik wil het graag converteren naar een tekenreeks zoals '2/23/2012'
.
Antwoord 1, autoriteit 100%
U kunt strftimegebruiken om u te helpen uw datum op te maken .
Bijvoorbeeld,
import datetime
t = datetime.datetime(2012, 2, 23, 0, 0)
t.strftime('%m/%d/%Y')
zal opleveren:
'02/23/2012'
Meer informatie over opmaak zie hier
Antwoord 2, autoriteit 40%
date
en datetime
objecten (en ook time
) ondersteunen een mini-taal om uitvoer te specificeren, en er zijn twee manieren om toegang te krijgen:
- directe methodeaanroep:
dt.strftime('format here')
- formaatmethode(python 2.6+):
'{:format here}'.format(dt)
- f-strings(python 3.6+):
f'{dt:format here}'
Uw voorbeeld zou er dus als volgt uit kunnen zien:
dt.strftime('The date is %b %d, %Y')
'The date is {:%b %d, %Y}'.format(dt)
f'The date is {dt:%b %d, %Y}'
In alle drie de gevallen is de uitvoer:
De datum is 23 februari 2012
Voor de volledigheid: je hebt ook direct toegang tot de attributen van het object, maar dan krijg je alleen de cijfers:
'The date is %s/%s/%s' % (dt.month, dt.day, dt.year)
# The date is 02/23/2012
De tijd die nodig is om de minitaal te leren is de moeite waard.
Ter referentie, hier zijn de codes die in de minitaal worden gebruikt:
%A
Weekdag als afgekorte naam van de landinstelling.%A
Weekdag als de volledige naam van de landinstelling.%W
Weekdag als decimaal getal, waarbij 0 zondag is en 6 zaterdag.%d
Dag van de maand als decimaal getal met nul.%B
Maand als afgekorte naam van de landinstelling.%B
Maand als de volledige naam van de landinstelling.%M
Maand als decimaal getal met nul. 01, …, 12%Y
Jaar zonder eeuw als decimaal getal met nul. 00, …, 99%Y
Jaar met eeuw als decimaal getal. 1970, 1988, 2001, 2013%H
Uur (24-uurs klok) als een decimaal getal met nul. 00, …, 23%I
Uur (12-uurs klok) als een decimaal getal met nul. 01, …, 12%p
Het lokale equivalent van AM of PM.%M
Minuut als een decimaal getal met nul. 00, …, 59%S
Tweede als een decimaal getal met nul. 00, …, 59%f
Microseconde als decimaal getal, met nul aan de linkerkant. 000000, …, 999999%Z
UTC-offset in de vorm +HHMM of -HHMM (leeg indien naïef), +0000, -0400, +1030%Z
Tijdzonenaam (leeg indien naïef), UTC, EST, CST%j
Dag van het jaar als decimaal getal met nul. 001, …, 366%U
Weeknummer van het jaar (zondag is de eerste) als een nul opgevuld decimaal getal.%W
Weeknummer van het jaar (maandag is eerst) als decimaal getal.%c
De juiste datum- en tijdweergave van de landinstelling.%X
De juiste datumweergave van de landinstelling.%X
Locale’s juiste tijdweergave.%%
Een letterlijk ‘%’-teken.
Antwoord 3, autoriteit 7%
Een andere optie:
import datetime
now=datetime.datetime.now()
now.isoformat()
# ouptut --> '2016-03-09T08:18:20.860968'
Antwoord 4, autoriteit 2%
U kunt eenvoudige methoden voor het opmaken van tekenreeksen gebruiken:
>>> dt = datetime.datetime(2012, 2, 23, 0, 0)
>>> '{0.month}/{0.day}/{0.year}'.format(dt)
'2/23/2012'
>>> '%s/%s/%s' % (dt.month, dt.day, dt.year)
'2/23/2012'
Antwoord 5, autoriteit 2%
type-specific formatting
kan ook worden gebruikt:
t = datetime.datetime(2012, 2, 23, 0, 0)
"{:%m/%d/%Y}".format(t)
Uitvoer:
'02/23/2012'
Antwoord 6, autoriteit 2%
Als u op zoek bent naar een eenvoudige manier om datetime
om te zetten in stringconversie en het formaat kunt weglaten. U kunt het datetime
-object converteren naar str
en vervolgens array-slicing gebruiken.
In [1]: from datetime import datetime
In [2]: now = datetime.now()
In [3]: str(now)
Out[3]: '2019-04-26 18:03:50.941332'
In [5]: str(now)[:10]
Out[5]: '2019-04-26'
In [6]: str(now)[:19]
Out[6]: '2019-04-26 18:03:50'
Maar let op het volgende. Als andere oplossingen een AttributeError
opleveren als de variabele None
is, ontvang je in dit geval een 'None'
string.
In [9]: str(None)[:19]
Out[9]: 'None'
Antwoord 7
Als je ook de tijd wilt, ga dan gewoon met
datetime.datetime.now().__str__()
Print 2019-07-11 19:36:31.118766
in console voor mij
Antwoord 8
Veruit de meest sexy versie is met opmaakstrings.
from datetime import datetime
print(f'{datetime.today():%Y-%m-%d}')
Antwoord 9
Het is mogelijk om een datetime-object om te zetten in een string door rechtstreeks met de componenten van het datetime-object te werken.
from datetime import date
myDate = date.today()
#print(myDate) would output 2017-05-23 because that is today
#reassign the myDate variable to myDate = myDate.month
#then you could print(myDate.month) and you would get 5 as an integer
dateStr = str(myDate.month)+ "/" + str(myDate.day) + "/" + str(myDate.year)
# myDate.month is equal to 5 as an integer, i use str() to change it to a
# string I add(+)the "/" so now I have "5/" then myDate.day is 23 as
# an integer i change it to a string with str() and it is added to the "5/"
# to get "5/23" and then I add another "/" now we have "5/23/" next is the
# year which is 2017 as an integer, I use the function str() to change it to
# a string and add it to the rest of the string. Now we have "5/23/2017" as
# a string. The final line prints the string.
print(dateStr)
Uitvoer –> 23-5-2017
Antwoord 10
Je kunt datetime converteren naar string.
published_at = "{}".format(self.published_at)
Antwoord 11
Aaneenschakeling van tekenreeksen, str.join
, kan worden gebruikt om de tekenreeks te bouwen.
d = datetime.now()
'/'.join(str(x) for x in (d.month, d.day, d.year))
'3/7/2016'
Antwoord 12
Je kunt de datetime op deze manier gemakkelijk converteren naar een string:
from datetime import datetime
date_time = datetime(2012, 2, 23, 0, 0)
date = date_time.strftime('%m/%d/%Y')
print("date: %s" % date)
Dit zijn enkele van de patronen die u kunt gebruiken om datetime naar string te converteren:
Voor een beter begrip kun je dit artikel bekijken op hoe strings naar datetime en datetime naar string in Python te converterenof de officiële strftime
documentatie
Antwoord 13
end_date = “202-04-18 16:00:00”
end_date_string = end_date.strftime(“%Y-%m-%d”)
print(end_date_string)