Ich versuche, eine Datumsspalte und eine Zeitspalte aus einer Tabelle zu lesen. Ich bin in der Lage, die Datumsspalte aus dem Blatt zurückzuziehen, aber nicht die Zeitspalte.
Zum Beispiel hat mein Blatt Zeilen in der Form:
11/2/2012 12:15:01
Ich habe den folgenden Code, um die Datumsspalte zu erhalten:
%Vor%Wie Sie sehen können, verwende ich
HSSFDateUtil.isCellDateFormatted (Zelle)
, um zu prüfen, ob die Zelle einen Datumswert enthält. Ich möchte wissen, ob ich überprüfen kann, ob die Zelle über eine Funktion Zeitwerte hat.
Das Excel-Blatt kommt von einer externen Quelle. Daher kann ich das Format nicht ändern.
Im Moment bekomme ich die richtigen Datumswerte für Datumsspalten. Aber für Zeitspalten bekomme ich
12/31/1899
als Ergebnis für alle Zeilen
Eine kurze Einführung zu Daten und Zeiten in Excel. Aus Gründen, die bei der Erstellung des Dateiformats sehr sinnvoll waren, aber jetzt nur noch verwirrend erscheinen, verfügt Excel nicht über einen Date- oder Time- oder DateTime-Typ. Stattdessen sind es Zahlen und spezielle Formatierungsregeln.
Wie sieht man das? Geben Sie 10.5 in eine Excel-Zelle ein und formatieren Sie sie als Datum und Uhrzeit. Du bekommst mittags ein Datum im Januar 1900.
Wenn Sie also POI fragen, ob eine Zelle mit Datum formatiert ist, gibt es kein einfaches Flag / Type zum Überprüfen. Stattdessen können alle POIs die auf eine Zelle angewendete Formatierungszeichenfolge lesen und nachsehen, ob sie verdächtig nach einem Datum aussieht.
Bonusmarken - versuchen Sie, den 28. Februar 1900 zu speichern, fügen Sie dann einen hinzu - Excel reproduziert getreulich einen Lotus 123 Bug um 1900 Schaltjahre ...
Als allgemeine Regel gibt DateUtil.isCellDateFormatted(cell)
für Datenzellen, Zeitzellen und Datumszeiträume den Wert true zurück. Sie können jedoch manchmal ein wirklich seltsames Format bekommen, von dem Excel weiß, dass es sich um ein Datum oder eine Uhrzeit handelt, aber POI kann es nicht erkennen. Für diese können Sie immer noch nach dem Zellenwert als Datum fragen, und POI wird es umwandeln.
Wenn in Ihrem Fall POI angibt, dass das Datum formatiert ist, erhalten Sie den Wert als Datum. Sehen Sie sich nun die Formatzeichenfolge an. Wenn es sich um ein Datum handelt, formatieren Sie es als Datum. Datum und Uhrzeit suchen? Format als Ihr bevorzugtes Datum + Zeit. Nur Zeit? Format als Zeit? Zeitzonen? Du musst lachen ...
Oh, und solange du nicht mit echten Daten aus der Zeit um 1900 arbeitest, kannst du einfach sagen DateUtil.isCellDateFormatted(cell)
+ value & lt; 100 - & gt; wahrscheinlich nur eine Zeit (& gt; 1, wenn es eine verstrichene Zeit ist). Wenn Ihre Nummer ein int ist, ist es wahrscheinlich nur ein Datum (aber es könnte Mitternacht sein). Wenn es nicht-int ist (ish - merke, dass Excel Gleitkommazahlen verwendet), hat es wahrscheinlich eine Zeitkomponente.
Dies ist mein grober Versuch, "Nur-Datum" -, "Nur-Zeit" - oder "Datum-Uhrzeit" -Werte von POI-Zellen
zu erhalten %Vor%Tags und Links java datetime excel apache-poi spreadsheet