Liste der Zeitzonen mit einfacher Auswahl...

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hätte gern in DjangoBB eine Liste der Zeitzonen mit den größten Städten.

Ein Ersatz für:

Code: Alles auswählen

TZ_CHOICES = [(float(x[0]), x[1]) for x in (
    (-12, '-12'), (-11, '-11'), (-10, '-10'), (-9.5, '-09.5'), (-9, '-09'),
    (-8.5, '-08.5'), (-8, '-08 PST'), (-7, '-07 MST'), (-6, '-06 CST'),
    (-5, '-05 EST'), (-4, '-04 AST'), (-3.5, '-03.5'), (-3, '-03 ADT'),
    (-2, '-02'), (-1, '-01'), (0, '00 GMT'), (1, '+01 CET'), (2, '+02'),
    (3, '+03'), (3.5, '+03.5'), (4, '+04'), (4.5, '+04.5'), (5, '+05'),
    (5.5, '+05.5'), (6, '+06'), (6.5, '+06.5'), (7, '+07'), (8, '+08'),
    (9, '+09'), (9.5, '+09.5'), (10, '+10'), (10.5, '+10.5'), (11, '+11'),
    (11.5, '+11.5'), (12, '+12'), (13, '+13'), (14, '+14'),
)]
siehe: https://github.com/jedie/DjangoBB/blob/ ... /models.py

Hab mal im Internet gesucht. Aber meist findet man nur listen mit zu vielen Städten. Die besten Treffer sind noch:
http://msdn.microsoft.com/en-us/library ... 11%29.aspx
http://www.davidsemporium.co.uk/worldclock.html

Ich dachte vielleicht bekomme ich die info's ja von pytz und hab ein Skript gebastelt:

Code: Alles auswählen

import collections
from datetime import datetime

import pytz


def get_shortest(l, max=3):
    """
    >>> get_shortest(["aa","bbb","c","dd"])
    ['c', 'aa', 'dd']

    >>> get_shortest(["aa","b","cc","d"], 2)
    ['b', 'd']
    """
    l = sorted(l, key=lambda x: len(x))
    return l[:max]


def get_human_timezones(max_cities=3, max_countries=4):
    human_timezones = {}

    utc = pytz.timezone('UTC')
    utc_now = datetime.now()#.replace(tzinfo=utc)

    timezone_data = {}#collections.defaultdict(list)
    for zone_name in pytz.common_timezones:
        tz = pytz.timezone(zone_name)

        dt = tz.localize(utc_now)
        offset = dt.strftime("%z")

        #~ utcoffset = tz._utcoffset # timedelta object
        #~ offset = utcoffset.total_seconds() / 60

        if offset not in timezone_data:
            timezone_data[offset] = [dt.strftime("%Z")]

        timezone_data[offset].append(zone_name)

    for utc_offset, data in timezone_data.items():
        tz_acronym = data[0]
        places = data[1:]

        places_dict = collections.defaultdict(list)
        for place in places:
            if "/" in place:
                country, cities = place.split("/",1)
                places_dict[country].append(cities)

        human_places = []
        for country, cities in sorted(places_dict.items()):
            cities = get_shortest(cities, max=max_cities)
            human_places.append(
                "%s:%s" % (country, ",".join(cities))
            )
        human_places = "%s - %s" % (
            tz_acronym, " - ".join(human_places)
        )


        human_timezones[utc_offset] = human_places

    return human_timezones


if __name__ == "__main__":
    human_timezones = get_human_timezones(max_cities=3, max_countries=4)
    for utc_offset, human_places in sorted(human_timezones.items(), key=lambda x: int(x[0])):
        print utc_offset, human_places
Die Ausgabe ist diese:
-1100 SST - Pacific:Niue,Midway,Pago_Pago
-1000 HST - Pacific:Tahiti,Honolulu,Johnston - US:Hawaii
-0930 MART - Pacific:Marquesas
-0900 HADT - America:Adak - Pacific:Gambier
-0800 AKDT - America:Nome,Sitka,Juneau - Pacific:Pitcairn - US:Alaska
-0700 PDT - America:Dawson,Phoenix,Tijuana - Canada:Pacific - US:Arizona,Pacific
-0600 CST - America:Boise,Belize,Denver - Canada:Mountain - Pacific:Easter,Galapagos - US:Mountain
-0500 EST - America:Lima,Bogota,Cancun - Canada:Central - US:Central
-0430 VET - America:Caracas
-0400 AST - America:Aruba,Cuiaba,Guyana - Antarctica:Palmer - Canada:Eastern - US:Eastern
-0300 BRT - America:Bahia,Belem,Thule - Antarctica:Rothera - Atlantic:Bermuda,Stanley - Canada:Atlantic
-0230 NDT - America:St_Johns - Canada:Newfoundland
-0200 WGST - America:Godthab,Noronha,Miquelon - Atlantic:South_Georgia
-0100 CVT - Atlantic:Cape_Verde
+0000 GMT - Africa:Lome,Accra,Dakar - America:Danmarkshavn,Scoresbysund - Atlantic:Azores,Reykjavik,St_Helena
+0100 CET - Africa:Lagos,Tunis,Bangui - Atlantic:Faroe,Canary,Madeira - Europe:Dublin,Jersey,Lisbon
+0200 CAT - Africa:Cairo,Ceuta,Harare - Arctic:Longyearbyen - Europe:Oslo,Rome,Malta
+0300 EAT - Africa:Asmara,Kampala,Nairobi - Antarctica:Syowa - Asia:Aden,Gaza,Amman - Europe:Kiev,Riga,Minsk - Indian:Comoro,Mayotte,Antananarivo
+0400 GST - Asia:Dubai,Muscat,Tbilisi - Europe:Moscow,Samara,Volgograd - Indian:Mahe,Reunion,Mauritius
+0430 AFT - Asia:Kabul,Tehran
+0500 MAWT - Antarctica:Mawson - Asia:Baku,Oral,Aqtau - Indian:Maldives,Kerguelen
+0530 IST - Asia:Colombo,Kolkata
+0545 NPT - Asia:Kathmandu
+0600 VOST - Antarctica:Vostok - Asia:Dhaka,Almaty,Bishkek - Indian:Chagos
+0630 MMT - Asia:Rangoon - Indian:Cocos
+0700 DAVT - Antarctica:Davis - Asia:Hovd,Omsk,Bangkok - Indian:Christmas
+0800 WST - Antarctica:Casey - Asia:Macau,Brunei,Harbin - Australia:Perth
+0845 CWST - Australia:Eucla
+0900 TLT - Asia:Dili,Seoul,Tokyo - Pacific:Palau
+0930 CST - Australia:Darwin,Adelaide,Broken_Hill
+1000 DDUT - Antarctica:DumontDUrville - Asia:Yakutsk - Australia:Currie,Hobart,Sydney - Pacific:Guam,Chuuk,Saipan
+1030 LHST - Australia:Lord_Howe
+1100 MIST - Antarctica:Macquarie - Asia:Sakhalin,Vladivostok - Pacific:Efate,Kosrae,Noumea
+1130 NFT - Pacific:Norfolk
+1200 NZST - Antarctica:McMurdo,South_Pole - Asia:Anadyr,Magadan,Kamchatka - Pacific:Fiji,Wake,Nauru
+1245 CHAST - Pacific:Chatham
+1300 WST - Pacific:Apia,Fakaofo,Enderbury
+1400 LINT - Pacific:Kiritimati
Dumm ist halt, das auch hier zu viele Städte dabei sind und ich deswegen schon das ganze mit get_shortest() kürze...

Wenn man eine Datenbank mit den Einwohnerzahlen der Städte hätte, dann könnte man das richtig machen...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

mal ein wenig weiter gespielt. Ich hab nämlich recht schnell daten über Städte und Einwohnerzahl gefunden und die von https://www.maxmind.com/app/worldcities genommen. Ist eine Text Datei mit 3173959 Einträgen und davon haben 43183 Städte auch Einwohnerzahlen. Der Inhalt sieht so aus:

Code: Alles auswählen

Country,City,AccentCity,Region,Population,Latitude,Longitude
ad,aixas,Aixàs,06,,42.4833333,1.4666667
ad,aixirivali,Aixirivali,06,,42.4666667,1.5
ad,aixirivall,Aixirivall,06,,42.4666667,1.5
ad,aixirvall,Aixirvall,06,,42.4666667,1.5
...
Also ein wenig gebastelt:

Code: Alles auswählen

# coding:utf-8

import time
import collections
from datetime import datetime

import pytz


def get_shortest(l, max=3):
    """
    >>> get_shortest(["aa","bbb","c","dd"])
    ['c', 'aa', 'dd']

    >>> get_shortest(["aa","b","cc","d"], 2)
    ['b', 'd']
    """
    l = sorted(l, key=lambda x: len(x))
    return l[:max]


def get_biggest(cities, population_data, max=2):
    """
    >>> get_biggest(["A", "B", "C"], {"b":1, "c":2})
    ['C', 'B']
    """
    cities = sorted(cities, key=lambda x: population_data.get(x.lower(), 0), reverse=True)
    return cities[:max]


def build_human_places(places_dict, population_data, max_chars):
    """
    >>> build_human_places(
    ...     {"r1": ["c1", "c2", "c3"], "r2": ["C1", "C2"], "r3": ["x1"]},
    ...     {"c2":10, "x1":2, "c3": 20},
    ...     max_chars=12)
    'c3,C2,x1,c2'
    """
    # places_dict: {"r1": ["c1", "c2"], "r2": ["C1", "C2"]}
    city_data = []
    for cities in places_dict.values():
        cities = sorted(cities, key=lambda x: population_data.get(x.lower(), 0), reverse=True)
        city_data.append(cities)

    human_places = []
    has_cities = True
    for index in xrange(20):
        has_cities = False
        for cities in city_data:
            #~ print index, cities
            try:
                city = cities[index]
            except IndexError:
                pass
            else:
                if (len(",".join(human_places)) + len(city)) >= max_chars:
                    #return ",".join(human_places)
                    break
                human_places.append(city)
                has_cities = True
        if not has_cities:
            break

    return ",".join(human_places)


def get_human_timezones(population_data, max_chars):
    human_timezones = {}

    utc = pytz.timezone('UTC')
    utc_now = datetime.now()#.replace(tzinfo=utc)

    timezone_data = {}#collections.defaultdict(list)
    for zone_name in pytz.common_timezones:
        tz = pytz.timezone(zone_name)

        dt = tz.localize(utc_now)
        offset = dt.strftime("%z")

        #~ utcoffset = tz._utcoffset # timedelta object
        #~ offset = utcoffset.total_seconds() / 60

        if offset not in timezone_data:
            timezone_data[offset] = [dt.strftime("%Z")]

        timezone_data[offset].append(zone_name)

    for utc_offset, data in timezone_data.items():
        tz_acronym = data[0]
        places = data[1:]

        places_dict = collections.defaultdict(list)
        for place in places:
            if "/" in place:
                country, cities = place.split("/",1)
                places_dict[country].append(cities)

        human_places = build_human_places(places_dict, population_data, max_chars)

        human_timezones[utc_offset] = (tz_acronym, human_places)

    return human_timezones


def city_data(filepath, min_population=10000000):
    """
    Data file from: https://www.maxmind.com/app/worldcities
    """
    start_time = time.time()
    next_status = start_time + 0.25
    population_data = {}
    with file(filepath, "r") as f:
        skip_count = 0
        for line in f:
            country,city,accentcity,region,population,latitude,longitude = line.split(",")
            if not population:
                continue
            try:
                population = int(population)
            except ValueError:
                continue

            if time.time() > next_status:
                next_status = time.time() + 1
                print "Adds %i cities and %i cities are too small" % (len(population_data), skip_count)

            if population<min_population:
                skip_count += 1
                continue

            population_data[city.lower()] = population

    print "Adds %i cities and %i cities are too small" % (len(population_data), skip_count)
    return population_data


if __name__ == "__main__":
    import doctest
    print doctest.testmod()
    #~ sys.exit()

    population_data = city_data("worldcitiespop.txt", min_population=1)
    #~ population_data = {}

    human_timezones = get_human_timezones(population_data, max_chars=70)
    for utc_offset, human_places in sorted(human_timezones.items(), key=lambda x: int(x[0])):
        print utc_offset, human_places
Raus kommt dann das:

Code: Alles auswählen

-1100 ('SST', 'Midway,Niue,Pago_Pago')
-1000 ('HST', 'Hawaii,Honolulu,Johnston,Rarotonga,Tahiti')
-0930 ('MART', 'Marquesas')
-0900 ('HADT', 'Adak,Gambier')
-0800 ('AKDT', 'Anchorage,Alaska,Pitcairn,Juneau,Sitka,Nome,Metlakatla,Yakutat')
-0700 ('PDT', 'Pacific,Phoenix,Arizona,Tijuana,Pacific,Hermosillo,Vancouver')
-0600 ('CST', 'Mountain,Managua,Mountain,Easter,Guatemala,Galapagos,Tegucigalpa')
-0500 ('EST', 'Central,Bogota,Central,Chicago,Guayaquil,Monterrey,Winnipeg,Cancun')
-0430 ('VET', 'Caracas')
-0400 ('AST', 'Eastern,Palmer,Toronto,Eastern,Montreal,Manaus,Port-au-Prince,Detroit')
-0300 ('BRT', 'Atlantic,Rothera,Fortaleza,Stanley,Recife,Bermuda,Montevideo,Maceio')
-0230 ('NDT', 'Newfoundland,St_Johns')
-0200 ('WGST', 'Miquelon,South_Georgia,Godthab,Noronha')
-0100 ('CVT', 'Cape_Verde')
+0000 ('GMT', 'Reykjavik,Danmarkshavn,Abidjan,Azores,Scoresbysund,Dakar,St_Helena')
+0100 ('CET', 'London,Canary,Kinshasa,Dublin,Faroe,Casablanca,Lisbon,Madeira,Algiers')
+0200 ('CAT', 'Budapest,Longyearbyen,Harare,Stockholm,Johannesburg,Prague,Lubumbashi')
+0300 ('EAT', 'Istanbul,Syowa,Antananarivo,Nairobi,Baghdad,Kiev,Comoro,Mogadishu')
+0400 ('GST', 'Samara,Mahe,Dubai,Volgograd,Mauritius,Yerevan,Moscow,Reunion,Tbilisi')
+0430 ('AFT', 'Kabul,Tehran')
+0500 ('MAWT', 'Mawson,Kerguelen,Karachi,Maldives,Tashkent,Baku,Dushanbe,Samarkand')
+0530 ('IST', 'Colombo,Kolkata')
+0545 ('NPT', 'Kathmandu')
+0600 ('VOST', 'Vostok,Chagos,Yekaterinburg,Almaty,Dhaka,Bishkek,Qyzylorda,Thimphu')
+0630 ('MMT', 'Cocos,Rangoon')
+0700 ('DAVT', 'Davis,Christmas,Jakarta,Bangkok,Novosibirsk,Omsk,Novokuznetsk')
+0800 ('WST', 'Casey,Perth,Shanghai,Manila,Chongqing,Singapore,Harbin,Taipei,Urumqi')
+0845 ('CWST', 'Eucla')
+0900 ('TLT', 'Palau,Tokyo,Seoul,Irkutsk,Dili,Jayapura,Pyongyang')
+0930 ('CST', 'Darwin,Adelaide,Broken_Hill')
+1000 ('DDUT', 'DumontDUrville,Brisbane,Chuuk,Yakutsk,Melbourne,Guam,Sydney,Hobart')
+1030 ('LHST', 'Lord_Howe')
+1100 ('MIST', 'Macquarie,Noumea,Vladivostok,Efate,Sakhalin,Guadalcanal,Kosrae,Pohnpei')
+1130 ('NFT', 'Norfolk')
+1200 ('NZST', 'McMurdo,Auckland,Magadan,South_Pole,Fiji,Anadyr,Funafuti,Kamchatka')
+1245 ('CHAST', 'Chatham')
+1300 ('WST', 'Apia,Enderbury,Fakaofo,Tongatapu')
+1400 ('LINT', 'Kiritimati')
Ist schon besser. Die Logik:
Es werden nur die größten Städtenamen angezeit, allerdings verteil aus jeder Region. Sodas nicht eine Region komplett fehlt, nur weil die größten Städte kleiner sind als die einer anderen.

Aber ich denke das kann man noch besser machen, ehr danach:
* nur die größten Städte, allerdings min. 1 von jeder Region.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens Wozu bitte brauchst Du das?
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Damit ein Benutzer in seinen DjangoBB Profil Einstellungen seine Zeitzone einstellen kann. Mich stört, das in der Liste einfach nur der Offset Wert angegen ist. Ich denke viele wissen den spontan nicht.

Die Liste soll am ende natürlich nicht live erzeugt werden, sondern kann dann Hardcoded hinterlegt werden.

Wobei man generell die Frage stellen kann, wie Zeitzoneninformationen in einem Forum überhaupt gehandhabt werden soll. Hatte auch schon mal überlegt alle Zeiten als UTC aufzugeben und dann per JavaScript zu lokalisieren. Aber das ist ein anderes Thema.

Ich hab jedenfall mal angefangen beim Auswahldialog ein wenig hilfestellung zu geben: https://github.com/jedie/DjangoBB/compa ... ..timezone
Dabei wird dann einmal die Aktuelle Zeit in der aktuellen Einstellung vom Server generiert und gleichzeitig per JavaScript die Zeit daneben angezeigt. Dabei kann man den UTC Offset auch recht einfach im Browser bestimmen:

Code: Alles auswählen

<script type="text/javascript">
$(document).ready(function() {
    var now = new Date();
    var local_time = now.toLocaleString()
    var time_zone_offset = -now.getTimezoneOffset() / 60;
    var info = "<p><small>Your local time in browser is <strong>"+ local_time +"</strong> with your local time zone: <strong>GMT " + time_zone_offset + "</strong></small></p>";
    $("#id_time_zone").after(info);
});
</script>
btw. ein thread im DjangoBB Forum gibt es u.a. hier: http://support.djangobb.org/topic/288/

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens Wenn Du Benutzern die Wahl der Zeitzone gestatten möchtest, solltest Du dann nicht auch einfach alle existierenden Zeitzonen zur Auswahl anbieten? Ich weiß, es ist unwahrscheinlich, dass ausgerechnet ein Benutzer aus der Zeitzone der Casey-Station heraus das Forum verwendet, aber man weiß ja nie ;)

Zeitzonen sind nicht identisch, nur weil sie zufällig dasselbe Offset haben. Mithin darfst Du Zeitzonen nicht einfach unter ihrem aktuellen Offset subsumieren. Dir sollte selbst auffallen, dass das Offset nicht mal konstant ist, sondern sich durch die Umstellung auf die Sommerzeit ändert. Da die Ausweisung der Zeitzone nicht international geregelt, sondern im staatliche Hoheitsaufgabe ist, hat faktisch auch jeder Staat seine eigene Zeitzone. Auch in Europa, auch wenn hier die Zeitzonen kraft EU-Verordnung weitgehend vereinheitlicht sind. Dennoch ist "Europe/Berlin" nicht dieselbe Zeitzone wie "Europe/Rome", denn diese Zonen unterliegen trotz ihres identischen Offsets unterschiedlichen legislativen Instanzen. In anderen Teilen der Welt gibt es gar keine homogenen Regelungen. Die USA ist ein Flickenteppich aus Zeitzonen, und wenn sich die Zeit in Texas ändert, interessiert das Mexiko nicht im Geringsten, obwohl es von Mexico City näher an Austin liegt als die Südspitze Italiens an Berlin.

Zeitzonen sind im Übrigen nicht konstant, sondern verändern sich mit den legislativen Regelungen der jeweiligen Staaten. In Deutschland gilt UTC+1/+2 nicht, weil die Natur es so will, sondern weil der Gesetzgeber es so entschieden hat. Folglich ändern sich Zeitzonen auch öfters, weswegen es in der Regel auch vierteljährliche Aktualisierung der Olson-Datenbank gibt. In Russland hat sich die Zeit in der letzten Dekade beispielsweise zweimal geändert. Daher darfst Du die Zeitzonen auch nicht einfach hartkodiert in den Quelltext schreiben.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Hm. Stimmt... Danke für die Ausführungen...

Nun könnte man auch einfach nur den offset als Zahl speichern. Aber zwischenzeitlich hab ich mir eine andere Lösung überlegt:

Beim jedem erstellen eines Beitrags wird per JavaScript der aktuelle Offset in einem versteckten Feld eingetragen. Fallback wäre dann Offset = 0 also UTC (Ist eh unwarscheinlich das jemand kein JS an hat)

Was ich nur nicht weiß, ob jeder Browser das selbe liefern würde, bei:

Code: Alles auswählen

    var now = new Date();
    var time_zone_offset = -now.getTimezoneOffset() / 60;
Somit kann man im User-Profile die Zeitzone einfach ganz weg lassen und man hat keine Probleme mit Sommer/Winterzeit.

Die Frage wäre noch, was überhaupt mit diesen Informationen passiert. Natürlich kann man sie erstmal mit speichern. Das verwenden kann evtl. so aussehen:
* Der Server liefert alles immer in UTC aus, allerdings mit dem jeweiligen Offset.
* Per JavaScript kann man dann die Zeiten transformieren oder einfach nur zusätzliche Informationen dazu anzeigen lassen

Der Vorteil sehe ich beim caching: Denn man bracht nicht die Seite jeweils separiert nach den Zeitzonen cachen (Was natürlich auch möglich wäre)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

jens hat geschrieben:Beim jedem erstellen eines Beitrags wird per JavaScript der aktuelle Offset in einem versteckten Feld eingetragen. Fallback wäre dann Offset = 0 also UTC (Ist eh unwarscheinlich das jemand kein JS an hat)
Ich habe JS generell deaktiviert (NotScript Plugin) und ich denke einige andere auch.
the more they change the more they stay the same
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

NoScript nutzte ich auch. Aber in einem Forum bei dem man Mitglied ist, schalte ich es natürlich aus. Zumal ohne JS siehst du beim schreiben nur eine nackte textarea.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens Zu kompliziert… speichere auf dem Server die Zeit des Beitrags in UTC (der Server wird ja wohl eine zuverlässige Zeit haben), und konvertiere dann beim Ausliefern in den vom Benutzer gewählte Zeitzone. Meinetwegen auch in Javascript, wer das heute noch ausschaltet, ist imho selbst schuld.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

@jens: Kleiner Hinweis zu deiner `get_shortest()`-Funktion: Um nach der Länge zu sortieren, braucht es keinen Umweg über eine Lambda-Funktion. Du kannst `len` doch auch direkt als `key` für `sorted()` setzen... ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@snafu: Ah, stimmt. Danke.

@lunar: Natürlich wäre das die einfachste Lösung. Aber seid Django 1.4 kann man ja die Zeiten mit Zeitzone speichern. Wobei ich mir den ganzen Kram noch nicht intensiv angesehen habe.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

@jens Nur weil es ein Feature gibt, muss man nicht auch zwanghaft verwenden… es ist unsinnig, eine Zeit mit Zeitzone zu speichern, wenn man nicht a priori weiß, ob man sie überhaupt wieder in dieser Zeitzone anzeigen muss. Speichere Zeiten eindeutig, sprich in UTC, und konvertiere bei der Ausgabe.
Antworten