Wie konvertieren eines double-Werts in einen DateTime in c#?
Habe ich den Wert 40880.051388 und bin speichern es als Doppel -, wenn ich öffnen Sie Excel und fügen Sie in eine Zelle, und wenden Sie das folgende benutzerdefinierte format "m/d/yyyy h:mm"
zu, dass die Zelle, bekomme ich "12/3/2011 1:14"
Wie kann ich das Parsen von/Umwandlung in C#? Ich weiß nicht, ob der Wert wird in Millisekunden von einem bestimmten checkpoint, wie die Epoche der Zeit, oder wenn der Wert in einigen spezifischen aufbereitet, aber wie funktioniert excel kommen mit dieser besonderen Wert? Geht das in C#?
Habe ich versucht, die Arbeit mit TimeSpan
, DateTime
, und anderen wie Dinge, die in Visual Studio, aber ich bin nicht immer überall.
wenn Sie nicht wissen, was die Zahl wirklich darstellt, wie Sie wissen, dass Excel ' s choice, wie format, ist es richtig? Sie sollten wissen, an welchem Datum, die Anzahl tatsächlich entspricht, und bestimmen, was die Reihe logisch darstellt, bevor Sie überlegen, wie um ihn zu Programmieren.
möglich, Duplikat der Wie konvertieren von "double" auf "datetime" zwischen Excel und c#
InformationsquelleAutor fifamaniac04 | 2012-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sieht aus wie bist du mit dem alten OLE-Automatisierung-date. Verwenden
Ich habe gerade entdeckt, dass
DateTime.FromOADate
gibt eine Genauigkeit von nur 1 Millisekunde. Bekommen Sie eine viel höhere Präzision, wenn Sie sich interessieren. Siehe meine neue Antwort in einem alten thread.InformationsquelleAutor Jaime Torres
Probieren Sie etwas wie dieses:-
InformationsquelleAutor Rahul Tripathi
Wert ist ein Versatz in Tagen vom 30. Dezember 1899. Du willst also:
Dieser code ist nicht korrekt, wenn sich das doppelt negativ aus.
Sehr wahr. Aber auch Sie verliert an Präzision, weil das argument wird gerundet/abgeschnitten, auf die nächste Millisekunde. Wissen Sie, warum der Rahmen immer wegwirft Präzision wie? Es macht keinen Sinn. Ich schrieb eine lange Antwort in einem anderen thread ich hoffe, daß Sie Lesen möchten.
InformationsquelleAutor Cory Nelson
Versuchen Sie es mit
var dateTime = DateTime.FromOADate(40880.051388);
.Wenn Sie brauchen, um format-eine Zeichenfolge, verwenden Sie
dateTime.ToString("M/d/yyyy H:mm", CultureInfo.InvariantCulture)
. Geben Sie 24-Stunden-string (ändernH
zuh
für eine 12-Stunden-system).Wenn Sie brauchen mehr Präzision (um einen Faktor 1000 oder mehr) als
FromOADate
finden Sie meine Antwort in einem anderen thread.InformationsquelleAutor Jeppe Stig Nielsen
Den folgenden einfachen code funktioniert
Jedoch, wenn die Leistung entscheidend ist, kann es nicht schnell genug gehen. Dieser Vorgang ist sehr Prozessor intensiv, weil der Bereich der Daten, für die OLE-Automatisierung-Date-format beginnt am 30. Dezember 1899 in der Erwägung, dass DateTime beginnt am 1. Januar 0001, im Gregorianischen Kalender.
FromOADate fordert eine DoubleDateToTicks Funktion mit myDouble als einziges argument. Dieser liefert die Anzahl der ticks, und dieser Wert wird verwendet zum erstellen eines neuen DateTime-mit unbekannter DateTimeKind.
Großteil dieser Arbeit erfolgt durch die DoubleDateToTicks Funktion "mscorlib". Diese enthält den code zu werfen, eine ArgumentException ausgelöst, wenn der Wert der Doppel-NaN, und es gibt zahlreiche Möglichkeiten, in denen die Leistung optimiert, je nach Ihren genauen Bedarf.
InformationsquelleAutor Kevin O'Shaughnessy