Jak wydrukować datę w zwykłym formacie w Pythonie?
To jest mój kod:
import datetime
today = datetime.date.today()
print today
/ 2008-11-22 21: 00: 00...Mam listę, do której to dołączam i nagle wszystko staje się"nieciekawe". Oto kod:
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist
To drukuje:
[datetime.date(2008, 11, 22)]
Jak, u licha, mogę dostać prostą datę jak "2008-11-22"?
21 answers
Dlaczego: daty są obiektami
W Pythonie daty są obiektami. Dlatego, kiedy nimi manipulujesz, manipulujesz obiektami, nie ciągami znaków, nie znacznikami czasu ani niczym innym.
Każdy obiekt w Pythonie ma dwie reprezentacje łańcuchowe:
Regularną reprezentację używaną przez "print" można uzyskać za pomocą funkcji
str()
. Jest to najczęściej najpopularniejszy format czytelny dla człowieka i służy do łatwego wyświetlania. Więcstr(datetime.datetime(2008, 11, 22, 19, 53, 42))
daje ci'2008-11-22 19:53:42'
.Alternatywna reprezentacja, która jest używana do reprezentowania natury obiektu (jako dane). Można go uzyskać za pomocą funkcji
repr()
i jest przydatny, aby wiedzieć, jakie dane manipulujesz podczas opracowywania lub debugowania.repr(datetime.datetime(2008, 11, 22, 19, 53, 42))
daje Ci'datetime.datetime(2008, 11, 22, 19, 53, 42)'
.
Stało się to, że po wydrukowaniu daty za pomocą "Drukuj", użyto str()
, abyś mógł zobaczyć ładny ciąg daty. Ale po wydrukowaniu mylist
, Wydrukowano listę obiektów i Pythona próbowano reprezentować zbiór danych, używając repr()
.
Jak: co chcesz z tym zrobić?
Cóż, kiedy manipulujesz datami, używaj obiektów daty przez całą drogę. Mają tysiące użytecznych metod i większość API Pythona oczekuje, że daty będą obiektami.
Jeśli chcesz je wyświetlić, po prostu użyj str()
. W Pythonie dobrą praktyką jest wyraźne rzucanie wszystkiego. Więc kiedy nadszedł czas, aby wydrukować, uzyskać ciąg reprezentacji daty za pomocą str(date)
.
mylist
. Jeśli chcesz wydrukować datę, musisz wydrukować obiekty daty, a nie ich kontener (listę).
Np, chcesz wydrukować wszystkie daty na liście:
for date in mylist :
print str(date)
Zauważ, że w tym konkretnym przypadku, możesz nawet pominąć str()
, ponieważ print użyje go za Ciebie. Ale to nie powinno stać się nawykiem: -)
Praktyczny przypadek, używając kodu
import datetime
mylist = []
today = datetime.date.today()
mylist.append(today)
print mylist[0] # print the date object, not the container ;-)
2008-11-22
# It's better to always use str() because :
print "This is a new day : ", mylist[0] # will work
>>> This is a new day : 2008-11-22
print "This is a new day : " + mylist[0] # will crash
>>> cannot concatenate 'str' and 'datetime.date' objects
print "This is a new day : " + str(mylist[0])
>>> This is a new day : 2008-11-22
Data zaawansowana formatowanie
Daty mają domyślną reprezentację, ale możesz chcieć wydrukować je w określonym formacie. W takim przypadku można uzyskać niestandardową reprezentację ciągu znaków za pomocą metody strftime()
.
strftime()
oczekuje wzoru łańcucha wyjaśniającego, jak chcesz sformatować datę.
E. G:
print today.strftime('We are the %d, %b %Y')
>>> 'We are the 22, Nov 2008'
Wszystkie litery po "%"
reprezentują format czegoś :
-
%d
jest liczbą dnia -
%m
to numer miesiąca -
%b
jest skrótem miesiąca -
%y
to dwa ostatnie cyfry roku -
%Y
jest cały rok
Etc
Spójrz na oficjalną dokumentację , lub McCutchen ' s quick reference {[88] } nie możesz znać ich wszystkich.
Od PEP3101 , każdy obiekt może mieć swój własny format używany automatycznie przez metodę format dowolnego ciągu znaków. W przypadku datetime format jest taki sam jak stosowany w strftime. Więc możesz zrobić to samo, co powyżej tak:
print "We are the {:%d, %b %Y}".format(today)
>>> 'We are the 22, Nov 2008'
Zaletą tego formularza jest to, że można konwertować również inne obiekty w tym samym czasie.
Z wprowadzeniem sformatowanych literałów łańcuchowych (od Pythona 3.6, 2016-12-23) można to zapisać jako
import datetime
f"{datetime.datetime.now():%Y-%m-%d}"
>>> '2017-06-15'
Lokalizacja
Daty mogą automatycznie dostosowywać się do lokalnego języka i Kultury, jeśli używasz ich we właściwy sposób, ale jest to trochę skomplikowane. Może dla innego pytania na SO (Stack Overflow); -)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-25 11:00:14
import datetime
print datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
Edit:
Po sugestii Cees też zacząłem używać czasu:
import time
print time.strftime("%Y-%m-%d %H:%M")
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-06 12:54:59
Obiekty date, datetime i time obsługują metodę strftime (format) , aby utworzyć ciąg znaków reprezentujący czas pod kontrolą jawnego formatu sznurek.
Oto lista kodów formatu wraz z ich dyrektywą i znaczeniem.
%a Locale’s abbreviated weekday name.
%A Locale’s full weekday name.
%b Locale’s abbreviated month name.
%B Locale’s full month name.
%c Locale’s appropriate date and time representation.
%d Day of the month as a decimal number [01,31].
%f Microsecond as a decimal number [0,999999], zero-padded on the left
%H Hour (24-hour clock) as a decimal number [00,23].
%I Hour (12-hour clock) as a decimal number [01,12].
%j Day of the year as a decimal number [001,366].
%m Month as a decimal number [01,12].
%M Minute as a decimal number [00,59].
%p Locale’s equivalent of either AM or PM.
%S Second as a decimal number [00,61].
%U Week number of the year (Sunday as the first day of the week)
%w Weekday as a decimal number [0(Sunday),6].
%W Week number of the year (Monday as the first day of the week)
%x Locale’s appropriate date representation.
%X Locale’s appropriate time representation.
%y Year without century as a decimal number [00,99].
%Y Year with century as a decimal number.
%z UTC offset in the form +HHMM or -HHMM.
%Z Time zone name (empty string if the object is naive).
%% A literal '%' character.
Oto co możemy zrobić z modułami datetime i time w Pythonie
import time
import datetime
print "Time in seconds since the epoch: %s" %time.time()
print "Current date and time: " , datetime.datetime.now()
print "Or like this: " ,datetime.datetime.now().strftime("%y-%m-%d-%H-%M")
print "Current year: ", datetime.date.today().strftime("%Y")
print "Month of year: ", datetime.date.today().strftime("%B")
print "Week number of the year: ", datetime.date.today().strftime("%W")
print "Weekday of the week: ", datetime.date.today().strftime("%w")
print "Day of year: ", datetime.date.today().strftime("%j")
print "Day of the month : ", datetime.date.today().strftime("%d")
print "Day of week: ", datetime.date.today().strftime("%A")
To wydrukuje coś takiego:
Time in seconds since the epoch: 1349271346.46
Current date and time: 2012-10-03 15:35:46.461491
Or like this: 12-10-03-15-35
Current year: 2012
Month of year: October
Week number of the year: 40
Weekday of the week: 3
Day of year: 277
Day of the month : 03
Day of week: Wednesday
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-22 14:26:14
Użyj daty.strftime. Argumenty formatowania są opisane w dokumentacji .
To jest to, czego chciałeś:
some_date.strftime('%Y-%m-%d')
Ten bierze pod uwagę lokalizacje. (do this)
some_date.strftime('%c')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-04 09:06:54
To jest krótsze:
>>> import time
>>> time.strftime("%Y-%m-%d %H:%M")
'2013-11-19 09:38'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-19 08:39:04
# convert date time to regular format.
d_date = datetime.datetime.now()
reg_format_date = d_date.strftime("%Y-%m-%d %I:%M:%S %p")
print(reg_format_date)
# some other date formats.
reg_format_date = d_date.strftime("%d %B %Y %I:%M:%S %p")
print(reg_format_date)
reg_format_date = d_date.strftime("%Y-%m-%d %H:%M:%S")
print(reg_format_date)
Wyjście
2016-10-06 01:21:34 PM
06 October 2016 01:21:34 PM
2016-10-06 13:21:34
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-06 08:24:34
Lub nawet
from datetime import datetime, date
"{:%d.%m.%Y}".format(datetime.now())
Out: "25.12.2013
Lub
"{} - {:%d.%m.%Y}".format("Today", datetime.now())
Out: "Dzisiaj - 25.12.2013"
"{:%A}".format(date.today())
Out: 'Wednesday'
'{}__{:%Y.%m.%d__%H-%M}.log'.format(__name__, datetime.now())
Out: '_ _ main _ _ _ _ 2014.06.09_ _ 16-56.log"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-09 13:58:31
Prosta odpowiedź-
datetime.date.today().isoformat()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-01 13:23:22
Ze specyficznym typemdatetime
formatowanie łańcuchów (Zobacz odpowiedź nk9 za pomocą str.format()
. w Pythonie 3.6, 2016-12-23):
>>> import datetime
>>> f"{datetime.datetime.now():%Y-%m-%d}"
'2017-06-15'
Dyrektywy formatu daty / czasu nie są dokumentowane jako część składni ciągu znaków formatu , ale raczej w date
, datetime
, i time
's strftime()
dokumentacja. Są one oparte na standardzie C z 1989 roku, ale zawierają niektóre dyrektywy ISO 8601 od Pythona 3.6.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-15 13:07:26
Musisz przekonwertować obiekt Date time na łańcuch znaków.
Następujący kod zadziałał dla mnie:
import datetime
collection = []
dateTimeString = str(datetime.date.today())
collection.append(dateTimeString)
print collection
Daj znać, jeśli będziesz potrzebował pomocy.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 18:45:00
Możesz dołączyć go jako ciąg znaków?
import datetime
mylist = []
today = str(datetime.date.today())
mylist.append(today)
print mylist
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 18:45:26
Możesz zrobić:
mylist.append(str(today))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-22 18:46:05
from datetime import date
def time-format():
return str(date.today())
print (time-format())
To wydrukuje 6-23-2018 jeśli tego chcesz:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-23 06:37:32
Biorąc pod uwagę fakt, że prosiłeś o coś prostego, aby zrobić to, co chciałeś, możesz po prostu:
import datetime
str(datetime.date.today())
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-03 14:10:43
Ponieważ print today
zwraca to, co chcesz, oznacza to, że funkcja __str__
today obiektu zwraca szukany łańcuch znaków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-18 08:59:25
Możesz użyć easy_date aby to ułatwić:
import date_converter
my_date = date_converter.date_to_string(today, '%Y-%m-%d')
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-10 05:32:55
Szybkie zastrzeżenie dla mojej odpowiedzi - uczę się Pythona dopiero od około 2 tygodni, więc w żadnym wypadku nie jestem ekspertem; dlatego moje wyjaśnienie może nie być najlepsze i mogę używać błędnej terminologii. W każdym razie, zaczyna się.
Zauważyłem w Twoim kodzie, że kiedy zadeklarowałeś swoją zmienną today = datetime.date.today()
Wybrałeś nazwę zmiennej nazwą wbudowanej funkcji.
Kiedy następna linijka kodu mylist.append(today)
dołączyła Twoją listę, dodała cały łańcuch datetime.date.today()
, który miałeś wcześniej ustawiona jako wartość zmiennej today
, a nie tylko dodawanie today()
.
Prostym rozwiązaniem, choć może nie takim, którego większość programistów użyłaby podczas pracy z modułem datetime, jest zmiana nazwy zmiennej.
Oto co próbowałem:
import datetime
mylist = []
present = datetime.date.today()
mylist.append(present)
print present
I drukuje yyyy-mm-dd
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 03:38:54
Oto Jak wyświetlić datę jako (Rok / Miesiąc/Dzień):
from datetime import datetime
now = datetime.now()
print '%s/%s/%s' % (now.year, now.month, now.day)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-19 00:06:59
Nienawidzę pomysłu importowania zbyt wielu modułów dla wygody. Wolałbym raczej pracować z dostępnym modułem, który w tym przypadku jest datetime
, niż wywoływać nowy moduł time
.
>>> a = datetime.datetime(2015, 04, 01, 11, 23, 22)
>>> a.strftime('%Y-%m-%d %H:%M')
'2015-04-01 11:23'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-28 20:37:29
Nie do końca rozumiem, ale, można użyć pandas
do uzyskania czasów w odpowiednim formacie:
>>> import pandas as pd
>>> pd.to_datetime('now')
Timestamp('2018-10-07 06:03:30')
>>> print(pd.to_datetime('now'))
2018-10-07 06:03:47
>>> pd.to_datetime('now').date()
datetime.date(2018, 10, 7)
>>> print(pd.to_datetime('now').date())
2018-10-07
>>>
I:
>>> l=[]
>>> l.append(pd.to_datetime('now').date())
>>> l
[datetime.date(2018, 10, 7)]
>>> map(str,l)
<map object at 0x0000005F67CCDF98>
>>> list(map(str,l))
['2018-10-07']
Ale przechowuje ciągi, ale łatwo je konwertować:
>>> l=list(map(str,l))
>>> list(map(pd.to_datetime,l))
[Timestamp('2018-10-07 00:00:00')]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-07 06:17:50
import datetime
import time
months = ["Unknown","January","Febuary","Marchh","April","May","June","July","August","September","October","November","December"]
datetimeWrite = (time.strftime("%d-%m-%Y "))
date = time.strftime("%d")
month= time.strftime("%m")
choices = {'01': 'Jan', '02':'Feb','03':'Mar','04':'Apr','05':'May','06': 'Jun','07':'Jul','08':'Aug','09':'Sep','10':'Oct','11':'Nov','12':'Dec'}
result = choices.get(month, 'default')
year = time.strftime("%Y")
Date = date+"-"+result+"-"+year
print Date
W ten sposób możesz sformatować datę w następujący sposób: 22-Jun-2017
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 05:26:45