[VC++ 2005] String->Format?

the incredible Leitman

Erfahrenes Mitglied
Bitte kann mir jemand helfen?

Ich versuche nun schon seit einiger Zeit herauszufinden, wie ich für einen String ein Format definieren kann

Ich habe einen String, der zusammengesetzt wird aus der Systemzeit und einer Meldung!
Das funktioniert, kein Problem,

Jedoch will ich nun ein Format für den Teil mit der Zeit festlegen, dass immer 2 Stellen angezeigt werden. Momentan steht z.B. "11:26:6 T001 abgemeldet"
Ich möchte aber gerne die vollständige Zeit anzeigen?

Wenn ich nach String + Format suche, erhalte ich zwar viele Beiträge und Hilfestellungen, jedoch nicht das, was ich brauche. Auch die MSDN konnte mir nicht weiterhelfen :(

Momentan hab ich folgende Lösung:
C++:
this->m_time = System::DateTime::Now;

System::String^ second = Convert::ToString(this->m_time->Second);
System::String^ minute = Convert::ToString(this->m_time->Minute);
System::String^ hour = Convert::ToString(this->m_time->Hour);

// hat keine Auswirkungen:
//second->Format(("%0.2d"),second);

this->m_stringTime = hour + ":" + minute + ":" + second + " ";

this->m_stringActMsg = m_stringTime + m_stringCallMsg;

Was mache ich falsch ?

Verwende ich den FormatBefehl falsch?
Oder bin ich total auf dem Holzweg?
Gibts dafür gar kein Property, muss ich selber in einer Funktion überprüfen ob die Zeit einstellig ist und falls ja, darauf reagieren?

Bitte, ich hoffe irgendjemand kann mir weiterheöfen, bin total verplant

mfG
Leitman
 
Wenn die Format-Funktion dieselbe ist wie beim CString dann sollte das so aussehen:

second->Format( "%02d",second );

Also ohne den Punkt. Der Punkt wäre für Nachkommastellen, die gibt es bei Integer aber nicht.
 
Endurion hat gesagt.:
Wenn die Format-Funktion dieselbe ist wie beim CString dann sollte das so aussehen:

second->Format( "%02d",second );

Also ohne den Punkt. Der Punkt wäre für Nachkommastellen, die gibt es bei Integer aber nicht.
hm...Danke, das hört sich gut an :D

Funktioniert aber leider nicht...
Hat keine Auswirkungen, egal ob mit oder ohne Punkt... ;(

Woran kann das liegen?
 
Hi,

Also unter CSharp funktioniert das folgendermaßen:
ob es auch unter managed C++ funktioniert, musst du mal ausprobieren
C#:
[...]
string s1 = "{0} - {1}";
s1 = String.Format(s1, DateTime.Now, "irgendwelcher Text");
Console.Writeline(s1);
[...]
Ausgabe:
Code:
19.09.2006 16:30 - irgenwelcher Text
 
niggo hat gesagt.:
Hi,
Also unter CSharp funktioniert das folgendermaßen:
ob es auch unter managed C++ funktioniert, musst du mal ausprobieren
C#:
[...]
string s1 = "{0} - {1}";
s1 = String.Format(s1, DateTime.Now, "irgendwelcher Text");
Console.Writeline(s1);
[...]

hm... nicht ganz...
C++:
// Code...

m_time = System::DateTime::Now

System::String^ second = "{0}";
second = second->Format(second, m_time->Second);

System::String^ minute = "{0}";
minute = minute->Format(minute, m_time->Minute);

System::String^ hour = "{0}";
hour = hour->Format(hour, m_time->Hour);
this->m_stringTime = hour + ":" + minute + ":" + second + " ";

// Code...
AUSGABE: (z.B.) 17:5:9

Kann das sein, sobalb man einen String im Date format trennt (also in Sekunden, Stunde, usw...) dass dann auch die 2stellige Formatierung verloren geht

Wenn ich nämlich (wie du in deinem Beispiel) einfach System::DateTime::Now ausgebe, dann passts!
 
Hi.

Versuch's mal so:
C++:
m_time = System::DateTime::Now;

this->m_stringActMsg = m_time.ToString("T") + m_stringCallMsg;

Such mal in der Doku nach "Date and Time Format Strings". Da gibt's dann Standardformate (wie z.B. "t" für kurze Zeit und "T" für lange Zeit - ist Culture abhängig) und man kann sich auch selber was zusammenbasteln.

Gruß

/edit: Ich denke mal du mußt da "HH:mm:ss" nehmen.
 
Zuletzt bearbeitet:
@leitman

Wieso so kompliziert? Schau dir mal die Klasse DateTime genauer an, da gibt es eine Methode, die dir genau das zurück gibt, was du haben willst. Heißt ToShortTimeString oder so ähnlich (hab jetzt keine lust zum Suchen).
 
@ deepthroat:
Danke, das war sehr hilfreich :D
Hab zwar schon versucht, in der MSDN Hinweise zu bekommen, aber wenn man nicht genau weiß wonach genau man suchen soll, kann das natürlich nicht funktioniern ;)
Aber passt, genau das wars, THX

(btw, wenn dein Code managed cpp sein soll:
C++:
m_time = System::DateTime::Now; 
this->m_stringActMsg = m_time->ToString("T") + m_stringCallMsg;
B-) )

@ Niggo:
Danke, in DateTime (structure *gg*) gibts auch was ich verwenden kann:
ToShortTimeString, ToLongTimeString und dasselbe fürs Datum :D
Thx, sehr freundlich

mfG
Leitman
 

Neue Beiträge

Zurück