PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASP.NET 2.0 / C# - Unter XP gehts, unter Windows 2000 .NET! (Convert String to Int64)


Matrix316
2007-07-24, 16:08:41
Habe hier ein komisches Problem. Wenn ich in der IDE Debugge oder lokal auf dem Rechner mit Windows XP starte, funktionierts ohne Probleme, aber auf einem Server mit Windows 2000 nicht mehr.

Und zwar konvertiere ich einen String der so aussieht "00" zu Int64, was dann natürlich eine 0 ergeben soll.

Da kommt die Fehlermeldung: Input string was not in a correct format.

Problem ist, es ist eine Uhrzeit und die ist nunmal so nach der Art: 8:00 Uhr. Das ist in einem String und den Splitte ich und bekomme einmal die 8 und einmal die 00 - und bei der Convertierung der zweiten bekomm ich den Fehler.

Was könnte das sein?

Gast
2007-07-24, 16:18:28
Und zwar konvertiere ich einen String


Und wie genau machst du das? Verwende mal die Convert.To... Methode.
Wozu brauchst du außerdem einen Int64?


Problem ist, es ist eine Uhrzeit und die ist nunmal so nach der Art: 8:00 Uhr.

Schon mal daran gedacht, die DateTime Struct zu verwenden, um den String zu parsen und dann wieder formatiert auszugeben?

Matrix316
2007-07-24, 16:36:26
Kommando zurück, ist doch nicht unbedingt eine Uhrzeit sondern sowas:

"8,00" was für 8 Stunden und 00 Minuten stehen soll. Also eine Zeitdauer.

Also so siehts ungefähr aus:

String[] Split = sString.Split(',');

Int64 iValue = Convert.ToInt64(Split[1]); //Fehler



Komisch ist halt, dass es unter Windows XP geht, unter 2000 aber ein Fehler kommt.

EDIT: Mit "int" gehts auch net (unter 2000).

EDIT2: Jetzt hab ich gedacht es geht vielleicht sogar mit DateTime, nämlich:

int iValue = Convert.ToDateTime(Split[0] + ":" + Split[1]);

Aber hier gibts jetzt einen anderen Fehler... The string was not recognized as a valid DateTime. There is a unknown word starting at index 5.
Wobei das wieder nur unter 2000 so ist. Unter XP gibts keinen Fehler...

Matrix316
2007-07-24, 17:23:17
Oh Mann, selbst das geht nicht:


String sTest = sArbeitszeitSplit[1].ToString().Replace("0", ""); /00 steht drinnen
if (sTest == "")
sTest += 0;

int iArbeitszeitMinuten = Convert.ToInt32(sTest);

TheGamer
2007-07-24, 19:33:42
Habe hier ein komisches Problem. Wenn ich in der IDE Debugge oder lokal auf dem Rechner mit Windows XP starte, funktionierts ohne Probleme, aber auf einem Server mit Windows 2000 nicht mehr.

Und zwar konvertiere ich einen String der so aussieht "00" zu Int64, was dann natürlich eine 0 ergeben soll.

Da kommt die Fehlermeldung: Input string was not in a correct format.

Problem ist, es ist eine Uhrzeit und die ist nunmal so nach der Art: 8:00 Uhr. Das ist in einem String und den Splitte ich und bekomme einmal die 8 und einmal die 00 - und bei der Convertierung der zweiten bekomm ich den Fehler.

Was könnte das sein?

Es erschliesst sich mir zwar der Sinn von Int64 in diesem Fall nicht oder ueberhaupt der Sinn. Aber wo ist das Problem?

string InputTime = "8:00";

DateTime dtInputTime = DateTime.Parse( InputTime );

Int64 Hour = dtInputTime.Hour;
Int64 Minute = dtInputTime.Minute;

// Ergebnis:
//
// dtInputTime = 24.07.2007 08:00:00
// Hour = 8
// Minute = 0


bzw. fuer die zweite Frage mit 8,00 anstatt 8:00


string InputTime = "8,00";

DateTime dtInputTime = DateTime.ParseExact( InputTime, "H,mm", System.Globalization.CultureInfo.CurrentCulture );

Int64 Hour = dtInputTime.Hour;
Int64 Minute = dtInputTime.Minute;

// Ergebnis:
//
// dtInputTime = 24.07.2007 08:00:00
// Hour = 8
// Minute = 0


Hab ich die Frage falsch verstanden?

Matrix316
2007-07-24, 20:27:06
Muss ich mal sehen ob das so geht.

Die Sache ist halt, dass ich Ursprünglich eine Stundenzahl bekomme und dann durch 5 Teile um die Tagesstunden zu bekommen. Da kommen halt auch Kommazahlen bei raus, welche dann unter Umständen auch 3 Stellen hinter dem Komma haben können und dann nicht so schön als String aussehen und die ich dann auf 2 Umrechnen will.

Hole aus Datenbank:
Decimal iArbeitszeitTag = MethodeBekommtAusDatenbankDecimalWert(Convert.ToInt64(UserID.Text)) / 5;


Da könnte dann sowas drinstehen "6.006"

Und um das auf 2 Stellen zu runden, nutze ich dieses Abenteuerliche Konstrukt:
String sArbeitszeitTag = iArbeitszeitTag.ToString("C2").Replace("€", "").Trim();:redface:

Das ist jetzt ein String der z.B. so aussieht "6.01".

Und da versuch ich jetzt wieder die 6 und die 01 als int Wert. Wenn ich nämlich z.B. bei der Ursprünglichen Zahl "606" hinter dem Komma hätte, kann ich nicht so einfach in Minuten umrechnen.

Matrix316
2007-07-25, 08:49:13
Mist, die Zeile:

DateTime dtInputTime = DateTime.ParseExact( InputTime, "H,mm", System.Globalization.CultureInfo.CurrentCulture ); //InputTime ist String "8,00"

bringt mir wieder den Fehler:

String was not recognized as a valid DateTime

Aber wie gesagt NUR unter Windows 2000. Unter Windows XP gibts keinen Fehler. Was zum Geier kann das sein? Liegts nur an meiner komischen Aufrundgeschichte (mit dem Replace vom Euro Zeichen, was nötig ist, da der C2 Formatstring das da automatisch reinsetzt)?

EDIT: Jo, der "C2" wars. Mit "F" funktionierts auch unter 2000.