deutsche Ausgabe bei datetime Objekt

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

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
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.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

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')
Antworten