2013-03-19 19 views
7

Ich arbeite an einem Skript, wo ich mit Datetime-Objekten in Python arbeiten muss. Irgendwann habe ich eines dieser Objekte und ich muss den Wochentag (das ist ein Zahlenwert) in einem 3-Buchstaben-Format (d. H. Tue, Mi, etc.) bekommen. Hier ist ein kurzes Beispiel des Codes, in dateMatch.group() alles, was ich tue, ist, Teile eines Strings zu erhalten, der durch Regex-Matching erhalten wird.Wie erhalte ich den Wochentag in einem 3-Buchstaben-Format von einem Datetime-Objekt in Python?

from datetime import datetime 

day = dateMatch.group(2) 
month = dateMatch.group(3) 
year = dateMatch.group(4) 
hour = dateMatch.group(5) 
minute = dateMatch.group(6) 
second = dateMatch.group(7) 

tweetDate = datetime(int(year), months[month], int(day), int(hour), int(minute), int(second)) 

Von diesem Datum Zeit Objekt bekomme ich einen Zahlenwert Tag (d 18) und ich muss es (das heißt Di) konvertieren.

Danke!

Antwort

10

http://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

Datum, DATETIME und Zeitobjekte alle ein strftime(format) Verfahren unterstützen, die Zeit unter der Kontrolle einer expliziten Format-Zeichenkette eine Zeichenkette zu erzeugen darstellt.

...

% a - Abkürzung für den Wochentag Namen.

>>> datetime.datetime.now().strftime('%a') 
    'Wed' 
+1

Das ist lustig. Auf meiner Maschine steht "Di". :) –

+1

Es ist 0:24 in meiner Zeitzone. –

+0

Brilliant, danke! –

1

Die strftime method eines datetime object verwendet die current locale die Umwandlung zu bestimmen.

>>> from datetime import datetime 
>>> t = datetime.now() 
>>> t.strftime('%a') 
'Tue' 
>>> import locale 
>>> locale.setlocale(locale.LC_ALL, 'fr_FR') 
'fr_FR' 
>>> t.strftime('%a') 
'Mar' 

Wenn dies nicht akzeptabel ist (zum Beispiel, wenn Sie ein Datum für die Übertragung über ein Internet-Protokoll sind die Formatierung, können Sie tatsächlich die Zeichenfolge benötigen Tue unabhängig vom Gebietsschema des Benutzers), dann müssen Sie so etwas wie:

weekdays = 'Mon Tue Wed Thu Fri Sat Sun'.split() 
return weekdays[datetime.now().weekday()] 

Oder Sie könnten das "C" locale explizit anfordern:

locale.setlocale(locale.LC_TIME, 'C') 
return datetime.now().strftime('%a') 

aber das Gebietsschema wie diese Einstellung wirkt sich auf alle Formatierungsoperationen auf alle Threads in Ihrem Programm, also ist es vielleicht keine so gute Idee.

0

Der Doc I verwendet: http://docs.python.org/2/library/datetime.html

Zuerst heutige Datum brauchen:

today = date.today() # Which returns a date object 

Der Wochentag kann durch die Verwendung von einem Date-Objekt zu finden:

weekday = today.timetuple()[6] # Getting the 6th item in the tuple returned by timetuple 

Dies gibt Tage Seit Montag (0 wäre Montag), mit dieser Ganzzahl können Sie Folgendes tun:

print ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][weekday] # Prints out the weekday in three chars 

Kombi erhalten Sie:

from datetime import date 

today = date.today() # Gets the date in format "yyyy-mm-ddd" 
print today 
weekday = today.timetuple()[6] # Gets the days from monday 
print ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"][weekday] # Prints out the weekday in three chars 
0

Statt hartzucodieren [ "Mon", "Di", "Mi", "Do", "fr", "Sat", "Sun"], versuchen :

import calendar 
weekdays = [x for x in calendar.day_abbr] # in the current locale 
Verwandte Themen