Windows vs. Ubuntu verschiedener Output

paradox3lite

Mitglied
Hallo an alle,

Ich brauche dringen Eure hilfe. Bis um dienstag muss ich fertig sein.
Ich fasse mich kurz und knapp. Ein programm in Java in Eclipse unter Windows wurde geschrieben welches XML Dateien ausliest und Elemente ausgiebt (in eine HTML Datei als Tabelle). In den XML Dateien ist ein StartTime und Endtime. Das programm gibt auch die Different an, welche man bei der Auswertung am Schluss braucht. Alles geht problemlos unter Windows! Alles richtig.

Jedoch muss ich das programm in Ubuntu später mit nem Script launchen(andere Geschichte)
Ich habe Eclipse für Ubuntu installiert und den Code importiert und jdom Binaries hinzugefügt. Geht alles Problemlos und das Programm erzeugt auch die Datei die es sollte, jedoch hab ich teilweise Riesenunterschiede bei den Tagesdifferenzen.

Bsp.

in Windows ausgeführt: in der HTML Datei ...balablabal aus der XML Datei Differenz 6 Tage
in Ubuntu ausgeführt: in der HTML Datei ...blablabla aus der XML Datei Different 79 Tage

ich weis nicht was ich machen soll. Es muss evtl etwas daran liegen:


Java:
int last_day_LTE = 0;
	int counter_day_LTE = 0;
	
	int last_day_UMTS = 0;
	int counter_day_UMTS = 0;
	
	int last_day_BOTH = 0;
	int counter_day_BOTH = 0;
	
	public void setLast_day_LTE(int last_day_LTE) {				
		if(last_day_LTE - this.last_day_LTE != 0){
			counter_day_LTE++;
			this.last_day_LTE = last_day_LTE;
		}
	}
	
	public void setLast_day_UMTS(int last_day_UMTS) {				
		if(last_day_UMTS - this.last_day_UMTS != 0){
			counter_day_UMTS++;
			this.last_day_UMTS = last_day_UMTS;
		}
	}
	
	public void setLast_day_BOTH(int last_day_BOTH) {
		if(last_day_BOTH - this.last_day_BOTH != 0){
			counter_day_BOTH++;
			this.last_day_BOTH = last_day_BOTH;
		}
	}


Muss man für auf ubuntu sachen ändern oder wie? Sry für die Rechtschreibung, jedoch ist es sehr dringend :/
Wie gesagt auf Windows gehts Problemlos. bei ubuntu stimmen nur die Tage nicht überein, der Rest geht problemlos!

DANKE
 
Zuletzt bearbeitet von einem Moderator:
Ubuntu rechnet genauso wie Windows, darauf kannst du dich verlassen.
Wird die Datei denn überhaupt richtig eingelesen? Windows verwendet nen anderes Encoding als Unix.
 
Also es werden mehrere Dateien eingelesen. es geht um Statistiken. Es werden 3G Download, Upload, usage, IMEI, MSISDN etc ausgelesen und alles stimmt übereien (also MB zahl etc) ausser die Nutzung (Wo er mit den Tagen rechnen sollte)
 
Was meinst du? Die XML Dateien? Das sind über 400 Stück, teilweise kleine teilweise riesige mit über 1000 Zeilen oder so wie soll ich das am besten anstellen
 
Hier einen sinnvollen Rat zu geben grenzt etwas an Kaffesatzleserei. Du schreibst von Datumsdifferenzen in einer HTML-Datei, zeigst aber nicht den Code, der diese Differenz berechnet. Der Code, den du zeigst, sieht zwar für meinen Geschmack etwas seltsam aus, scheint aber -soweit ich das beurteilen kann- keine funktionellen Fehler zu enthalten.

Poste die Sachen, die bei einer Fehlersuche wirklich helfen könnten:
- Einen Ausschnitt aus der geparsten XML-Datei, wo man die Start- und Endzeit mal sieht
- Den Code, der das parst
- Den Code, der daraus Datumswerte macht
- Den Code, der die Differenz berechnet
- Den Code, der das in die HTML-Datei schreibt

Du könnest an den o.g. Stellen auch selbst entweder mit System.out, Log-Statements oder mit einem Debugger schrittweise die Werte kontrollieren und dann schauen, wo die Abweichung vom Soll-Zustand entsteht.

[EDIT]
Was mir grad noch einfällt: Kontrollier mal, ob auf Deinem Windows-Rechner und Deinem Ubuntu-Rechner die Zeiteinstellungen (Datum, Uhrzeit, Zeitzone) und die Ländereinstellungen übereinstimmen. Möglicherweise parst Du ja ein deutsches Datum mit Englischer Locale oder umgekehrt oder es läuft was beim Erzeugen der Dates/Calendars (was immer du da verwendest) schief, weil die Zeitzonen nicht stimmen.
[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:
ich kann damit 0 anfangen! Ich versuchs nochmal.
es werden mehrere XML Dateien ausgelesen 400+ stück. paar sind 2kb paar sind 3 mb gross und extrem lang ich kann die nicht vergleichen.

ich kenne mich mit java nicht wirklich gut aus
 
Zuletzt bearbeitet:
in Windows ausgeführt: in der HTML Datei ...balablabal aus der XML Datei Differenz 6 Tage
in Ubuntu ausgeführt: in der HTML Datei ...blablabla aus der XML Datei Different 79 Tage

Ich tippe mal auf ein anderes DateFormat beim einlesen/andere System Defaults.

Da wird aus dem 06.03.2012 (DD.MM.YYYY)schnell mal der 03.06.2012 (MM.DD.YYYY) und schwupp hast du statt 6 Tagen Differenz eine ganz andere...

Zeig doch mal den Code wo du die Daten parst.
 
Zuletzt bearbeitet von einem Moderator:
Also die Zeit stimmt auf beiden überein. Vielleicht noch zu Erwähnen dass ich ubuntu mit VMWare betreibe auf dem Windows rechner.
Datumsformat sollte auch gleich sein??!
 
Also sowie auf Windows wie auf Ubuntu sind Datumsformate auf Deutsch (Schweiz)!

Hier der Code welcher diese Tage ausrechnet. Das wird dann iwie mit dem Codeteil oben gemacht.

Java:
// Day Usage
			String recordOpeningTime = pgwRecord.getChild("recordOpeningTime").getText();
			recordOpeningTime = recordOpeningTime.substring(0, recordOpeningTime.length()-18);
			recordOpeningTime = removeSpaces(recordOpeningTime);
			int int_recordOpeningTime = Integer.valueOf(recordOpeningTime);
			currentBean.setLast_day_BOTH(int_recordOpeningTime);
			if(rATType.equals("6")){
				currentBean.setLast_day_LTE(int_recordOpeningTime);
			} else if (rATType.equals("1")){
				currentBean.setLast_day_UMTS(int_recordOpeningTime);
			}
			
			// Start and End Date
			recordOpeningTime = pgwRecord.getChild("recordOpeningTime").getText();
			String RecordDate = recordOpeningTime.substring(0, recordOpeningTime.length()-9);
			RecordDate = removeSpaces(RecordDate);
			long int_RecordDate = Long.valueOf(RecordDate);
			if(int_RecordDate < statistic_start_time || statistic_start_time == 0)
				statistic_start_time = int_RecordDate;
			if(int_RecordDate > statistic_end_time)
				statistic_end_time = int_RecordDate;

und so sieht das in der XML Datei aus: (Kann mehrmals vorkommen pro Nummer)
<recordOpeningTime>11 12 05 14 57 17 2B 01 00</recordOpeningTime>
 
Probier doch mal folgenden Code in beiden Systemen:

Java:
        public static void main(String[] args) throws ParseException {
        	DateFormat dateFormat = DateFormat.getDateInstance();
        	String dateString = "05.03.2012";
        	Date date = dateFormat.parse(dateString);     	
        	if(dateString.equals(DateFormat.getDateInstance().format(date))){
        		System.out.println("Alles gut");
        	} else {
        		System.err.println("locales stimmen nicht");
        	}
        }

Ich geh mal von einem DE-DE Windows aus.
 
In deinem Mini-XML Ausschnitt ist <recordOpeningTime>11 12 05 14 57 17 2B 01 00</recordOpeningTime> das das Datum? Und welches Datum? 11. Dez 05 oder 12. Nov 2005 oder 1905 oder oder oder

Wenn du das ganze mal als Jar packst und eine XML-Datei hier hochlädst schau ich mir das mal auf meinem Rechner an.
 
Ach, s*****e... Der Code bring nix. Nimm mal String den 23.03.2012. Das sollte ein Parsing Exception geben wenn es nicht passt.

Hast du denn den Code selber geschrieben? Ich sehe da gar kein Date sondern nur longs.... Irgendwie fehlt mir der gesammte Zusammenhang in dem Programm, z.B. wo wird der Code aus deinem Ersten Posting genutzt.
 
In deinem Mini-XML Ausschnitt ist <recordOpeningTime>11 12 05 14 57 17 2B 01 00</recordOpeningTime> das das Datum? Und welches Datum? 11. Dez 05 oder 12. Nov 2005 oder 1905 oder oder oder

Wenn du das ganze mal als Jar packst und eine XML-Datei hier hochlädst schau ich mir das mal auf meinem Rechner an.

Es wäre folgendes Datum 2011-12-05 Also 05.Dezember 2011
Ich weis nicht ob ich den ganzen Code zeigen darf.


@fassy: Nein nur teilweise mitgeholfen, ich arbeite an einem Projekt, unteranderem muss ich das Programm später mit Ubuntu automatisieren. läuft alles ok ausser diese Day Usage ist bei ubuntu falsch.Der Code von oben wird ist in einer anderen Class, welche im Hauptcode dann aufgeruft wird

@fassy: mit dem String 05.03.2012 erhalte ich auf Ubunti ein ParseException Fehler, unter Win gehts.
 
Zuletzt bearbeitet:
Tut mir leid ich denke ich kriege das nicht selber hin :/ Vorallem sollte am code nicht zu viel geändert werden dert wird später produktiv eingesetzt. Das Problem mit ubuntu muss doch zu lösen sein.

@fassy: mit dem String 05.03.2012 erhalte ich auf Ubunti ein ParseException Fehler, unter Win gehts.
 
@fassy: mit dem String 05.03.2012 erhalte ich auf Ubunti ein ParseException Fehler, unter Win gehts.

ich denke du meinst 23.03.2012? Dann hat dein Ubuntu das Dateformat auf z.B. US English MM.DD.YYYY und das parsen funktioniert natürlich nicht.

also brauchen wir die Funktion:

Java:
DateFormat format = new SimpleDateFormat("hier dein Format rein in dem 11 12 05 14 57 17 2B 01 00 steht");

Beispiel:
Java:
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
String dateString = "23.03.2012";
Date date = dateFormat.parse(dateString);

Ich hab in deinem Code immer noch nicht gefunden wo du eigentlich das Datum einließt 😉
 
Wäre auch eine Möglichkeit, aber eigentlich ist es Best Practice den Code locales unabhängig zu programmieren. Was machst du wenn das Live System eine andere locale hat und du es nicht mal merkst?

Probier mal dein Ubuntu umzusetzten, wichtig ist das du auf jeden Fall Eclipse neustartest, sonst siehst du evtl keine Änderung.
 
Frage vornweg, wie ändere ich genau die locale? Damit die auch übernommen werden sollte doch dann de_CH sein oder?

Dein Vorschlag wäre schon Best Practise, jedoch wüsste ich nicht wie den einbauen :/
 
So nach einigen Mühe konnte ich wenigstens die Locales ändern. Sehen jetzt so aus, sollten die so korrekt sein?

LANG=de_CH.utf8
LANGUAGE=de_CH:en_US:de_AT:en
LC_CTYPE="de_CH.utf8"
LC_NUMERIC="de_CH.utf8"
LC_TIME="de_CH.utf8"
LC_COLLATE="de_CH.utf8"
LC_MONETARY="de_CH.utf8"
LC_MESSAGES="de_CH.utf8"
LC_PAPER="de_CH.utf8"
LC_NAME="de_CH.utf8"
LC_ADDRESS="de_CH.utf8"
LC_TELEPHONE="de_CH.utf8"
LC_MEASUREMENT="de_CH.utf8"
LC_IDENTIFICATION="de_CH.utf8"
LC_ALL=

Jedoch das Problem ist immernoch da...
 
Ich bezweifel das du dein OS richtig konfiguriert hast oder in der Lage dazu bist. Da verplemmperst du nur Zeit.

Aus dem Grund:

Überarbeite deinen Code und bau einen vernünftigen Dateparser ein. Sich auf die System locales zu verlassen ist meist sehr sehr Fehler anfällig und davon rate ich dringend ab. Was meinst du was passiert wen in zwei Jahren mal jemand das Tool auf einem anderen Server ausrollt mit wieder einer anderen locale ohne vom dem Problem zu wissen? Da werden dann im schlimmsten Fall Kunden Rechnungen gestellt die aus euren Systemfehler kommen. Was meinst du was das kostet es später zu analysieren, berichtigen etc?

In der Zeit in der du versucht hast dein Ubuntu umzubiegen hättest du das dreimal erledigen können... 😉
 
Jo, du kannst bei den DateFormat die Locale angeben. Nie auf das System verlassen auf dem du arbeitest -> Locale ändern im Programm, nicht auf dem System
 

Zurück
Oben