Forum: Mikrocontroller und Digitale Elektronik Datum von der RTC in einen String packen


von Eugen T. (der_eugen_thorben)


Lesenswert?

Hi,

ich hätte eine Frage zu Strings.
Es ist so, dass ich einen String brauche, der so aussieht "04.06.2015".
Das Datum erhalte ich von der RTC. Jedoch weiß ich nicht, wie ich ein 
Datum in einen String mit Punkten wandeln kann, und zwar so, dass es 
nicht allzu aufwendig ist.

Hat jemand einen Vorschlag? Das Datum von der RTC ist vom Datentyp 
uint8_t.

Ich kann ja itoa verwenden, was dann einen anderen string erstellt und 
die 3 strings in einen mit pointern kombinieren. Geht es aber einfacher?

Ich verwende einen Atmega2560

Danke

von Eugen T. (der_eugen_thorben)


Lesenswert?

Denke ist gelöst. Ich addiere einfach den Wert drauf für ascii.

von Peter D. (peda)


Lesenswert?

Eugen Thorben schrieb:
> Es ist so, dass ich einen String brauche, der so aussieht "04.06.2015".
1
  sprintf( buffer, "%02u.%02u.%04u", (int)day, (int)month, year );

von Stefan F. (Gast)


Lesenswert?

sprintf(buffer,"%02d.%02d.%04d",tag,monat,jahr);

Selber programmieren spart jedoch Speicher, falls das von Nöten ist.

von Wolfgang A. (Gast)


Lesenswert?

Eugen Thorben schrieb:
> Es ist so, dass ich einen String brauche, der so aussieht "04.06.2015".

Das ist schon ein komisches Datenformat.

Auch wenn es nichts am Wandlungsprinzip ändert, warum nicht das 
standardisierte ISO-Format jjjj-mm-tt (ISO 8601). Die Uhrzeit gibt doch 
auch keiner als Minuten:Stunden an.

von Eugen T. (der_eugen_thorben)


Lesenswert?

Ich mach einen Pfad in der SD-Karte auf. Da soll dann der Ordner so 
heißen.

Denke nehme aber lieber sprintf, danke für den tip

: Bearbeitet durch User
von Malte S. (maltest)


Lesenswert?

Eugen Thorben schrieb:
> Ich mach einen Pfad in der SD-Karte auf. Da soll dann der Ordner so
> heißen.

Gerade dann solltest du nach ISO 8601 formatieren! Dann ist der Name 
nämlich nicht nur international verständlich, sondern vor allem auch mit 
simpler textuellen Sortierfolge sinnvoll sortierbar.
Bei deinem Format ist die Reihenfolge der Ordner im Dateibrowser fürn 
Popo.

von Eugen T. (der_eugen_thorben)


Lesenswert?

Ja, hast Recht. Dann mache ich es nach der ISO.

Ich kenn mich mit sprintf nicht so gut aus. Wäre es dann einfach so, 
wenn ich statt den Punkten Bindestriche möchte?
1
sprintf( buffer, "%04u-%02u-%02u", year, (int)month, (int)day);


Ich würde im Datumsordner noch dann eine csv Datei mit der Zeit anlegen.

Wäre es dann
1
sprintf( buffer, "%02u-%02u.csv", minute, second );

?

Würde gern dann z. B. eine csv Datei mit dem Namen 17-04 haben.


Danke für eure Vorschläge :D

: Bearbeitet durch User
von Malte S. (maltest)


Lesenswert?

Ja. Außer dass du mutmaßlich ..., hour, minute meintest und je nach Typ 
auch diese ggFs. explizit nach int umwandeln musst.

von Eugen T. (der_eugen_thorben)


Lesenswert?

Ja, mein ich :D .

Sorry für die Fehler

von Joachim B. (jar)


Lesenswert?

Eugen Thorben schrieb:
> Danke für eure Vorschläge :D

hier ist noch einer, ich mach das so, dann kann man auch mit strcmp 
vergleichen auf > und <

compile 2015/06/04_13:21:11
clock   2015/06/04_13:21:51
compile < RTC
1
RTC.getTime();
2
sprintf(r_str, "%04d/%02d/%02d_%02d:%02d:%02d", RTC.year, RTC.month, RTC.day, RTC.hour, RTC.minute, RTC.second);
3
4
Serial.println(r_str);

: Bearbeitet durch User
von Malte S. (maltest)


Lesenswert?

Genau. Aber warum / im Datum und _ als Trenner? - und Leerzeichen oder T 
ist Standard.

von Joachim B. (jar)


Lesenswert?

Malte S. schrieb:
> Genau. Aber warum / im Datum und _ als Trenner? - und Leerzeichen oder T
> ist Standard.

weil ich das auch so bei meinen Dateinamen für Bilder habe und 
Leerzeichen nicht jedes Dateisystem mag oder Sonderbehandlung "" 
benötigt.

Im Datum / ist ja nicht unüblich finde ich.

von Malte S. (maltest)


Lesenswert?

Joachim B. schrieb:
> weil ich das auch so bei meinen Dateinamen für Bilder habe und
> Leerzeichen nicht jedes Dateisystem mag oder Sonderbehandlung ""
> benötigt.

Deshalb und für die Eindeutigkeit steht vor der Zeit ein großes T. Dann 
ist kein Leerzeichen drin.

Joachim B. schrieb:
> Im Datum / ist ja nicht unüblich finde ich.

Aber leider in zig miteinander inkompatiblen Varianten und viel 
Potenzial für Uneindeutigkeiten. Deshalb sind / und . als Trennzeichen 
hier ungeeignet. / geht übrigens auch nicht im Dateinamen. : in der 
Zeitangabe auch nicht, daher empfiehlt sich bei Dateinamen eigentlich 
die Kurzfassung ohne Trennzeichen: 20150604T2018.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Malte S. schrieb:
> Zeitangabe auch nicht, daher empfiehlt sich bei Dateinamen eigentlich
> die Kurzfassung ohne Trennzeichen: 20150604T2018.

 Und ohne Tausend und Hundert - glaube kaum, dass einer von uns ins
 nächste Jahrhundert rübergeht - 150604T2052 reicht vollkommen.

von Thomas E. (thomase)


Lesenswert?

Marc Vesely schrieb:
> 150604T2052 reicht vollkommen

Für die Bibel und eingescannte Fotos aus dem 1. Weltkrieg aber nicht.
Und die Information der letzten Dateiänderung bekomme ich ohne den 
Dateinamen.

mfg.

von Praktiker (Gast)


Lesenswert?

Thomas Eckmann schrieb:
> Und die Information der letzten Dateiänderung bekomme ich ohne den
> Dateinamen.

Nicht jeder möchte das Aus-Checken einer Datei aus einem 
Versionierungs-Tool als Dateiänderung betrachten.

von Clerical (Gast)


Lesenswert?

Für die Bibel?

Beim Alten Testament biste aber mit ISO 8601 aufgeschmissen!

von Joachim B. (jar)


Lesenswert?

Malte S. schrieb:
> daher empfiehlt sich bei Dateinamen eigentlich
> die Kurzfassung ohne Trennzeichen: 20150604T2018.

das mit / und . oder : stimmt, deswegen im Dateinamen
2008_10_18__16_54_24.jpg

aber im µC Bereich finde ich (auch für LCD Ausgabe oder seriell)

Joachim B. schrieb:
> compile 2015/06/04_13:21:11
> clock   2015/06/04_13:21:51
> compile < RTC

lesbarer und beides kann man gut vergleichen oder sortieren.

: Bearbeitet durch User
von Malte S. (maltest)


Lesenswert?

Joachim B. schrieb:
> das mit / und . oder : stimmt, deswegen im Dateinamen
> 2008_10_18__16_54_24.jpg

Weil was genau gegen 20081018T165424.jpg spricht?

Joachim B. schrieb:
> lesbarer und beides kann man gut vergleichen oder sortieren.

Lesbar mag sein. Zur Anzeige wird daher ja auch 2008-10-18 statt 
20081018 empfohlen.

Ich wollte ja auch nur darauf hinweisen, dass es Standards gibt, damit 
nicht jeder seinen eigenen Standard erfinden muss ;-)

Clerical schrieb:
> Beim Alten Testament biste aber mit ISO 8601 aufgeschmissen!

Die Jahreszahl kann bei ISO 8601 auch negativ sein.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas Eckmann schrieb:
> Marc Vesely schrieb:
>> 150604T2052 reicht vollkommen
>
> Für die Bibel und eingescannte Fotos aus dem 1. Weltkrieg aber nicht.
> Und die Information der letzten Dateiänderung bekomme ich ohne den
> Dateinamen.
>
> mfg.

 Aha.
 Wenn du mir noch sagst, welche Dateinamen aus der Bibel zweideutig fur
 dich sind...
 Und welches RTC im 1. Weltkrieg verwendet wurde...

von Joachim B. (jar)


Lesenswert?

Malte S. schrieb:
> Ich wollte ja auch nur darauf hinweisen, dass es Standards gibt, damit
> nicht jeder seinen eigenen Standard erfinden muss ;-)

OK als ich 2003 damit anfing hatte ich halt nicht recherchiert, mein 
Fehler (meine Festplatte, meine Bilder)

: Bearbeitet durch User
von Wolfgang A. (Gast)


Lesenswert?

Joachim B. schrieb:
> OK als ich 2003 damit anfing hatte ich halt nicht recherchiert, mein
> Fehler (meine Festplatte, meine Bilder)

Was nützen die schönsten Standards, wenn jeder seinen eigenen hat.

Joachim B. schrieb:
> ... deswegen im Dateinamen 2008_10_18__16_54_24.jpg

von Joachim B. (jar)


Lesenswert?

Wolfgang A. schrieb:
> Was nützen die schönsten Standards, wenn jeder seinen eigenen hat.

was hilft mir ein Standard von dem ich nichts wußte und den ich für mich 
nicht brauche?

Mal ehrlich googelt ihr den Standard für Socken und Hemden in Schrank 
packen oder packt ihr einfach wie ihr mögt oder es euch gefällt?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.