Seite 1 von 1

deutsche Ausgabe bei datetime Objekt

Verfasst: Mittwoch 14. Oktober 2015, 13:56
von lackschuh
Hallo

Bei einer Webanwendung mit Datenbank lass ich mir das aktuelle Datum mittels ``datetime(CURRENT_TIMESTAMP, 'localtime')`` in die sqlite DB eintragen. Um das Datum zu Verwenden bzw. damit zu arbeiten, wandle ich den String wieder in ein datetime Objekt um. Das Problem ist nun, wenn ich mittels ``setlocale`` mir das deutsche Datum anzeigen lasse, dann hab ich in einer anderen Funktion, welche einen Zufallstring produziert, massive Probleme. Es werden keine Kleinbuchstaben mehr generiert, sondern irgendwelche Hieroglyphen.

Um das Theater zu umgehen, verwende ich z.Z. ``replace``. Gibt es da einen einfacheren Weg und warum werden solche Sonderzeichen ausgegeben?

Hier mal ein Beispiel:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8

import datetime
import locale
import random
import string


#locale.setlocale(locale.LC_ALL, '')


print ''.join([random.choice(string.lowercase) for i in range(10)])

monate = {
          'January': 'Januar',
          'February': 'Februar',
          'March': 'März',
          'April': 'April',
          'May': 'Mai',
          'June': 'Juni',
          'July': 'Juli',
          'August': 'August',
          'September': 'September',
          'October': 'Oktober',
          'November': 'November',
          'December': 'Dezember'
          }

now = datetime.datetime.strptime('2015-10-13 11:30:10', '%Y-%m-%d %H:%M:%S')
zeit = now.strftime('%M. %B %Y')
print zeit

for k, v in monate.items():
    if k in now.strftime('%M. %B %Y'):
        zeit = now.strftime('%M. %B %Y')
        zeit = zeit.replace(k, v)

print zeit

Re: deutsche Ausgabe bei datetime Objekt

Verfasst: Mittwoch 14. Oktober 2015, 14:14
von BlackJack
@lackschuh: Was `string.lowercase` ist hängt von der eingestellten Locale ab. Deutsche Kleinbuchstaben enthalten halt auch 'ä', 'ß' und Co. Und wenn man aus einer UTF-8 kodierten Bytezeichenkette zufällig Bytes auswählt, kommt da halt Müll bei rum. Wenn es nur ASCII-Buchstaben sein sollen, dann verwende halt `string.ascii_lowercase`. Das ist nur 'a' bis 'z'. Immer.

Für Locales zum Formatieren von Texten die nicht der eingestellten Standard-Locale entsprechen (müssen) würde ich mir das Babel-Package anschauen. Insbesondere bei Webanwendungen, wo man ja nicht mal damit rechnen kann das die entsprechenden Locale-Informationen im Systen überhaupt installiert sind, und mit welchen Argument(en) man die dann aktiviert.

Re: deutsche Ausgabe bei datetime Objekt

Verfasst: Mittwoch 14. Oktober 2015, 14:21
von lackschuh
Danke für den Hinweis auf http://babel.pocoo.org/docs/.
Könnte genau das sein, was ich brauche :wink:

Edit:
Funktioniert perfekt!

Code: Alles auswählen

news_datum = datetime.datetime.strptime(new[1], '%Y-%m-%d %H:%M:%S')
neues_datum = format_date(news_datum, format='long', locale='de')