2010-12-11 4 views
4

Wenn ich habe dieseZeitstempel Stringlänge

// Default implementation of UNIX time of the current UTC time 
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0); 
string myResult = ""; 
myResult = Convert.ToInt64(ts.TotalSeconds).ToString(); 

Was ist die maximale Stringlänge von MyResult und ist es immer die gleiche Größe?

+0

Warum müssen Sie wissen? –

+0

@KarlKnechtel Nur weil Neo wissen muss, wie weit das Kaninchenloch geht, um zu entscheiden, ob man eine rote Pille oder eine blaue Pille nehmen soll. –

Antwort

17

Ein Int64 ist eine vorzeichenbehaftete 64-Bit-Ganzzahl, was bedeutet, dass es einen Wertebereich von −9,223,372,036,854,775,808 bis 9,223,372,036,854,775,807 hat.

Da toString seine Ausgabe nicht mit Kommas formatiert, wäre der längste mögliche Wert der Zeichenfolge −9223372036854775808, der 20 Zeichen lang ist.

Nun, da dies einen UNIX-Zeitstempel darstellt, müssen wir in Betracht ziehen, was als ein "vernünftiges" Datum für die Rückkehr angesehen wird. Während ich dies schreibe, wäre ein aktueller UNIX-Zeitstempel etwas in der Nähe von 1292051460, was eine 10-stellige Zahl ist.

Angenommen, eine maximale Länge von 10 Zeichen gibt Ihnen eine Reihe von Zeitstempeln von -99999999 bis 9999999999. Dies gibt Ihnen eine Reihe von Daten von "Mon, 31. Oktober 1966 14:13:21 GMT" bis "Sat, 20 Nov 2286 17:46:39 GMT". Beachten Sie, dass ich das Negationssymbol als ein Zeichen in die untere Grenze einschließe, weshalb die untere Grenze der Epoche so viel näher ist als die obere Grenze.

Wenn Sie keine Daten vor Halloween 1966 oder nach Ende November 2286 erwarten, können Sie davon ausgehen, dass die Länge der Zeichenfolge nicht länger als 10 Zeichen ist. Wenn Sie Daten außerhalb dieses Bereichs erwarten (höchstwahrscheinlich vor 1966 und nicht nach 2286), können Sie eine 11-stellige Zeichenfolge erwarten. Mehr würde ich nicht erwarten.

Das ist die maximale Anzahl der Zeichen zu erwarten; es könnte kürzer sein.

+0

Perfekte Antwort, damit wir diese verwenden können, um eindeutige IDs zu erzeugen, die 10 Ziffern haben. Es ist praktisch, wenn Sie mit ID-Generatoren arbeiten. Es ist bereits eine ID und es kann jederzeit in Time konvertiert werden, so dass Datumswerte nicht gespeichert werden müssen. –

4

Angenommen, der Code wird weit in die Zukunft verwendet, es wäre die maximale Länge eines Int64.

Zum Beispiel gerade jetzt dieser Wert 1292022273 so die Länge 10.

würden Sie einen Rechner finden können, die die Sekunden hier http://www.timeanddate.com/date/duration.html

+0

Wird es immer 10 sein? – 001

+0

Nein, ich denke irgendwann im 24. Jahrhundert wird es über 9999999999 Sekunden gehen und 11 lang werden. Ich denke, es kommt darauf an, was du mit "immer" meinst. Ihr Code wird wahrscheinlich nicht in der Nähe sein. –

+7

24. Jahrhundert Ich werde tot sein, und sicherlich genug würde jemand das Problem vor dieser Zeit lösen! – 001

1

enthält Wenn Sie mit Convert.ToInt64() ohne Formatierung bleiben, dann Maximale Länge ist , weil das Minimum Int64-9223372036854775808 ist (das negative Zeichen erfordert ein zusätzliches Zeichen). In der Praxis wird jedoch nicht der gesamte Bereich verwendet, der durch Int64 aufgrund von Beschränkungen in TimeSpan und DateTime bereitgestellt wird.

Und, nein, die Länge von myResult wird nicht immer gleich sein, aber kann von 1 bis 20 reichen. Es hängt nur vom aktuellen Wert von Convert.ToInt64(ts.TotalSeconds) ab.

+0

Technisch wäre die maximale Länge 20 Zeichen, da Int64s unsigniert sind. ;) – AgentConundrum

+0

@AgentConundrum - Sie haben Recht; Ich habe die Antwort aktualisiert, um negative Werte zu berücksichtigen, da Int64s * signiert * sind ;-) –

+0

auargh ... und es ist zu spät, um meinen Kommentar zu bearbeiten. Ich bin dazu verurteilt, für alle Ewigkeit wie ein Idiot auszusehen! DOOOOMED! – AgentConundrum

0

Um maximale Größe des Timespan-Versuch zu erhalten diesen Code zu verwenden:

var maxValue = Convert.ToInt64(TimeSpan.MaxValue).ToString(); 

Hoffe, dass es Ihnen mit Ihrer Frage helfen! Viel Glück!

Mit freundlichen Grüßen, Dima.