Seite 1 von 1

Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 08:54
von DrAudio
Hallo,

bei meinen Messungen, wird ein Pfadname mit ID des Werkstückes und ein Timestamp mit Datum und Uhrzeit erzeugt.
Mittels Replace habe ich die notwendigen Angaben wie ID, Datum und Uhrzeit schon extrahiert.

Nun habe ich folgende Struktur so vorliegen:
ID Datum Zeit
345678, 180801, 0945

Ich möchte aber das Datum in dieser Form haben:

01.08.2018

Ebenso die Uhrzeit als:

09:45

Alle anderen Daten aus der Messung habe ich soweit isoliert und kann sie in ein *, csv-file einlesen.
Anschließen muss ich das csv-file in Excel einlesen, um anderen Kollegen meine Daten zur Verfügung zu stellen.

Nur bei der Datumsumwandlung und der Zeitumwandlung komme ich nicht weiter.

Klar kann man das Ganze mit len() machen und dann mühsam in Excel umbasteln - ich denke, da gibt es in Python einen eleganteren Weg.
Die Anwendung der Time-Bibliothek hat mich auch nicht auf die Spur gebracht...

Für eine Idee wäre ich dankbar - vielleicht ist es ja ganz simpel....

Gruß

Tobi

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 09:50
von Sirius3
replace ist nicht dafür gedacht, irgendwelche Daten zu extrahieren. Wie sehen denn Deine Ursprungsdaten aus?
Für Datumsoperationen gibt es das datetime-Modul, und darin datetime.strptime, das mit dem richtigen Formatstring Dein Problem lösen sollte. Am besten Datum und Uhrzeit als ein String parsen.

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 09:50
von __blackjack__
Das sieht doch nach ganz simplen Zeichenkettenoperationen aus‽ Ich würde das Datum übrigens in der Reihenfolge Jahr, Monat, Tag lassen, denn dann entspricht eine lexikografische Sortierung auch gleichzeitig der zeitlichen Sortierung. Und musst Du Datum und Zeit trennen? Ist doch letztlich *ein* Wert. '2018-08-01T09:45' wäre zudem eine Darstellung nach ISO8601.

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 13:08
von Sirius3
@__blackjack__: da kommt es letztlich darauf an, was Excel als Datum versteht, und das ist mit Deutscher Spracheinstellung eben nur '01.08.2018 09:45'.

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 13:21
von __blackjack__
@Sirius3: Echt? Ich hätte vermutet das auch ein deutsches Excel da mehr durchprobiert, denn ich weiss das ein Kunde Probleme mit Adresslisten als CSV hatte in denen so etwas wie die Hausnummer 10a von seinem deutschen Excel zu 10 Uhr gemacht wurde weil es das 'a' für 'a.m.' angenommen hat. Die Vermutung hatten wir erhärtet weil bei 10p die Uhrzeit 22 Uhr heraus kam.

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 13:58
von Sirius3
@__blackjack__: gerade getestet. Es muß "10:32 pm" mit Leerzeichen heißen, sonst wird keine amerikanisch Zeit erkannt. Hängt wahrscheinlich von der Version und dem Mondstand ab.

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Mittwoch 1. August 2018, 14:28
von __blackjack__
Da muss ich an's Python Zen denken, speziell an „In the face of ambiguity, refuse the temptation to guess”. :-)

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Freitag 3. August 2018, 21:11
von DeaD_EyE
ISO8601 sollte Excel beherrschen. Falls nicht, dann hat man ein Produkt erworben,
dass mit internationalen Standards nicht umgehen kann. Würde mich wundern, wenn Excel das nicht kann.

Code: Alles auswählen

datum = '180801' 
zeit = '0945'
dt_format = '%y%m%d%H%M'
zeitpunkt = datetime.datetime.strptime(datum + zeit, dt_format)
zeitpunkt_iso8601 = zeitpunkt.isoformat()
'2018-08-01T09:45:00'

Ist das UTC0 oder mit Zeitzone?
Das sollte man auch wissen, wenn man mit den Daten arbeitet.

Code: Alles auswählen

import pytz
berlin = pytz.timezone('Europe/Berlin')
lokal = berlin.localize(zeitpunkt)
zeitpunkt_lokal_iso8601 = lokal.isoformat()
'2018-08-01T09:45:00+02:00'

Hier sind dann auch die Informationen über die Zeitzone mit drin.
Die Frage ist, ob du das so benötigst.

Kannst natürlich auch Datum und Uhrzeit splitten.

Code: Alles auswählen

datum = zeitpunkt.date()
zeit = zeitpunkt.time()
Formatieren kannst du auch selbst beliebig:

Code: Alles auswählen

zeitpunkt.strftime('%m/%d/%y %H:%S')
Jedenfalls habe ich zwei Sachen gelernt: ISO 8601 nutzen, wo es geht. Zeitzonen sind wichtig.
Hab ich jetzt irgendwas ausgelassen? Ja, pytz ist nicht in der stdlib von Python.

Ganz wichtig: https://docs.python.org/3/library/datet ... me-objects

Re: Aus 6stelliger Zahl ein Datum erzeugen

Verfasst: Samstag 4. August 2018, 06:59
von ThomasL
Schade das man hier keine Beiträge bewerten kann ;-)
ich würde jetzt einen Daumenhoch oder +1 geben :-)