Java 1.6 / Zeitformat anpassen

Hallo zusammen

Ich muss ein relativ altes Programm erweitern und habe ein Problem mit der Zeitformatierung. Ich muss ein File abspeichern und brauche die aktuelle Zeit inklusive Datum. Ab Java 1.8 habe ich das folgendermassen gemacht:

				DateTimeFormatter Myformatter = DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
				LocalDateTime now = LocalDateTime.now();

				String pfad = "C:/transfer/";
				String fileName = pfad + "MKW1_" + now.format(Myformatter) + ".csv";

Leider gibt es den DateTimeFormatter in der Version 6 noch nicht. Ich möchte jedoch die Java Version vor Ort nicht ändern, da der PC noch mit Windows XP läuft…

Gibt es in Java 6 etwas vergleichbares?

Vielen Dank schonmal fĂĽr eure Hilfe

Gruss Roger

SimpleDateFormat (Java Platform SE 6) (oracle.com)

Ja, Datumszeug ist immer ein Krampf. Mit den neuen Klassen geht es (und jeder, der sich da noch über was beschwert, muss sich die Frage gefallen lassen, wie man es denn „besser“ machen könnte), aber manche Konzepte sind schon kompliziert.

package bytewelt;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class DateFormat
{
    public static void main(String[] args)
    {
        System.out.println(createNew());
        System.out.println(createOld());
    }

    private static String createNew()
    {
        DateTimeFormatter formatter =
            DateTimeFormatter.ofPattern("yyyyMMdd_HHmmss");
        LocalDateTime now = LocalDateTime.now();
        return now.format(formatter);
    }

    private static String createOld()
    {
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
        Date date = new Date();
        return format.format(date);
    }

}

Im Zweifelsfall kann man ja sonst auch in den Quellcode von Java 8 schauen und sich daran fĂĽr das bei Java 6 fehlende orientieren.

Das hat soweit super funktioniert. Vielen Dank schonmal fĂĽr die Hilfe.

Nun habe ich folgendes Problem in Eclipse und auch mit dem exportierten jar File. Ich kann mich nicht auf die hsql Datenbank verbinden:

Exception in thread "main" java.lang.UnsupportedClassVersionError: datenbank/verbinden : Unsupported major.minor version 51.0
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClassCond(Unknown Source)
	at java.lang.ClassLoader.defineClass(Unknown Source)
	at java.security.SecureClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.access$000(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at controller.ContMenue.initDB(ContMenue.java:48)
	at controller.ContMenue.<init>(ContMenue.java:31)
	at main.Main.<init>(Main.java:63)
	at main.Main.main(Main.java:104)

Kann mir da auch jemand weiterhelfen?

Also zur Ergänzung: In unserem Wiki gibt es Beiträge, die sich mit der Formatierung von Datum und Zeit befassen: https://wiki.byte-welt.net/wiki/Datum_auf_Swing-Komponenten_ausgeben

Der UnsupportedClassVersionError bricht die Ausführung ab, weil ein (anderer) Teil deines Programms mit einer neueren Java-Version kompiliert wurde und nun versucht wird, diesen Teil auf einer älteren JRE auszuführen.
Auch hier gibt es Wiki-Artikel dazu: https://wiki.byte-welt.net/wiki/Java-Compiler-Level_und_.class-Datei_Versionen_(major-_und_minor_version_number)

Achso ich verstehe…

Ich habe die hsqldb.jar als Referenzierte Libraries eingebunden und mit openJDK kompiliert. Nun musste ich die Java Version auf 1.6.30 umstellen und es wirft diesen Error. Wie kriege ich denn jetzt die Libraries jetzt wieder auf die Version 1.6 zurĂĽck?

Dafür brauchst du den Quellcode und kompilierst ihn mit den Compiler-Optionen, die eine Kompilierung für eine bestimmte Java-Version bewirken (siehe Artikel). Allerdings kann es da schon Probleme geben, denn im Quellcode könnten Klassen und Methoden benutzt werden, die nur für eine neuere Java-Version kompilierbar sind.
Alternativ kannst du dich nach einer älteren HSQLDB umschauen, die mit Java 1.6 arbeitet.

Könnte mir dabei jemand helfen?

Ich brauche die hsqldb 2.2.9, Kompiliert mit der Version 1.6. Ich kriege das leider nicht mehr hin.

IMO wird das wohl nicht gehen, die werden bestimmt features von neueren Versionen genutzt haben.

@headnut
Dir bleibt nix anderes ĂĽbrig, als Versionen zu nehmen, die noch auf Java 1.6 laufen, das sollte bei jedem Release auf dessen Homepage vermerkt sein.

Laut HSQLDB homepage sind die hier:
http://www.hsqldb.org/download/

1 Like

Also 1.6 ist ja nun wirklich die reinste Quälerei, keine Chance das Programm wenigstens auf 1.8 zu updaten? Könnte sein, dass das am Ende einfacher ist, als die ganzen Abhängigkeiten downzugraden.

Ich habe das eingesehen und dem Kunden vorgeschlagen den PC zu ersetzen und im diesem Zuge gleicht auf OpenJDK zu wechseln.

Windows XP war schön, ist aber nicht mehr zeitgemäss:-)

Danke euch für eure Hilfe und einen schönen Tag

2 Likes

Das ist aus vielen Gründen die bessere Lösung!