Προς το περιεχόμενο
  • 0

Πρόβλημα με LocalDate σε java


Lanike71

Ερώτηση

Καλή χρονιά σε όλους,

Πονοκέφαλος αυτό το πρόβλημα...Έχω μία εφαρμογή που σε κάποιους δε δουλεύει, σε εμένα δουλεύει κανονικά.

Κώδικας:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/YYYY");
LocalDate dateFrom = LocalDate.now();
LocalDate dateTo = dateFrom.plusDays(2);
JTextField txtDateFrom = new JTextField(dtf.format(dateFrom));
JTextField txtDateTo = new JTextField(dtf.format(dateTo));

Δύο textfields, που σε κάθε άνοιγμα, το πρώτο έχει τη σημερινή ημερομηνία και το δεύτερο +2 ημέρες.

Το παράδοξο: Το πρώτο εμφανίζει ημέρα και μήνα σωστά, αλλά έτος 2020 (!!!!) ενώ το δεύτερο εμφανίζει κανονικά, δηλ. + 2 ημέρες από την σημερινή...

Έψαξα παντού στο stack αλλά δε βρήκα άκρη...Το περίεργο είναι ότι σε μένα δουλεύει κανονικά, ενώ σε άλλους όχι.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

15 απαντήσεις σε αυτή την ερώτηση

Προτεινόμενες αναρτήσεις

  • 0
Επισκέπτης

Ποιο JRE έχεις εσύ που παίζει κανονικά και ποιο στους άλλους που δεν παίζει; Μήπως ξέμεινε κανείς στην Java 7;

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Το να δουλεύεις με Dates στην java είναι από τα χειρότερα τασκ ever. (Έκανα πρόσφατα ένα φουλ διαχειριστικό για κρατήσεις δωματίων και μου βγηκε η πίστη με τα dates).

Αν βγάλεις το pattern και αφήσεις το default,πάλι το ίδιο σου κάνει; 

Είχα παρόμοιο πρόβλημα με την μετατροπή σε milliseconds. Δεν μου έβαζε τα 2 τελευταία ψηφία στη μετατροπή για κάποιο λόγο. Στο epoch converter όμως, τα έβαζε κανονικά. Και άλλο date έπαιρνα στο πρόγραμμα , και άλλο στον converter. Να τρελαίνεσαι...

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)
50 λεπτά πριν, Lanike71 είπε

Καλή χρονιά σε όλους,

Πονοκέφαλος αυτό το πρόβλημα...Έχω μία εφαρμογή που σε κάποιους δε δουλεύει, σε εμένα δουλεύει κανονικά.

Κώδικας:


DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/YYYY");
LocalDate dateFrom = LocalDate.now();
LocalDate dateTo = dateFrom.plusDays(2);
JTextField txtDateFrom = new JTextField(dtf.format(dateFrom));
JTextField txtDateTo = new JTextField(dtf.format(dateTo));

Δύο textfields, που σε κάθε άνοιγμα, το πρώτο έχει τη σημερινή ημερομηνία και το δεύτερο +2 ημέρες.

Το παράδοξο: Το πρώτο εμφανίζει ημέρα και μήνα σωστά, αλλά έτος 2020 (!!!!) ενώ το δεύτερο εμφανίζει κανονικά, δηλ. + 2 ημέρες από την σημερινή...

Έψαξα παντού στο stack αλλά δε βρήκα άκρη...Το περίεργο είναι ότι σε μένα δουλεύει κανονικά, ενώ σε άλλους όχι.

To LocalDate.now() παίρνει την ώρα απο το ρολόι του συστήματος και το Timezone , μία χαρά δείχνει ο κώδικας , το έτρεξα και εγώ και δεν έχει κάποιο θέμα.

Αυτοί που λές ότι έχουν πρόβλημα που το τρέχουν? Μήπως σε κανα PC / Server που για κάποιο λόγο έχει μείνει η ημερομηνία στο σύστημα το 2020 ? ή έχουν κάποιο timezone διαφορετικό ? (που μέχρι εχθές θα μπορούσα να καταλάβω να μην έχει αλλάξει η χρονιά , σήμερα έχουμε 2 του μήνα οπότε δεν στέκει)

Επεξ/σία από tsofras
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Όχι, δεν έχουν σέρβερ, win10 και win7 τρέχουν, με java ενημερωμένη.

Το περίεργο είναι ότι επί 9 μήνες έπαιζε και μόλις άλλαξε η χρονιά τα έπαιξε...

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
20 λεπτά πριν, Lanike71 είπε

Όχι, δεν έχουν σέρβερ, win10 και win7 τρέχουν, με java ενημερωμένη.

Το περίεργο είναι ότι επί 9 μήνες έπαιζε και μόλις άλλαξε η χρονιά τα έπαιξε...

Δεν είναι περίεργο. Σε λίγο θα παίζει πάλι.

java - Difference between year-of-era and week-based-year? - Stack Overflow

Άλλαξε το YYYY σε yyyy στην παρακάτω εντολή (όπως το βλέπεις παρακάτω:)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");

  • Like 2
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
44 λεπτά πριν, marios28 είπε

Δεν είναι περίεργο. Σε λίγο θα παίζει πάλι.

java - Difference between year-of-era and week-based-year? - Stack Overflow

Άλλαξε το YYYY σε yyyy στην παρακάτω εντολή (όπως το βλέπεις παρακάτω:)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd/MM/yyyy");

Ωραίος , βέβαια το παραπάνω δεν λύνει την απορία γιατί σε άλλους παίζει και σε άλλους όχι :S

Εγώ το δοκίμασα τοπικά και σε online java compiler και έδειξε σωστά και στα 2

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

θα το δοκιμάσω και θα σου πω @marios28.

Από αυτά που διάβασα στο stack, μάλλον είναι η λύση.

Ευχαριστώ.

ΥΓ. Ίσως είναι η μοναδική φορά σε κώδικα, που μπορεί να ισχύει το "κάνε υπομονή λίγες μέρες και πού θα πάει, θα παίξει".

Χαχαχα...

  • Haha 2
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)
1 ώρα πριν, tsofras είπε

Ωραίος , βέβαια το παραπάνω δεν λύνει την απορία γιατί σε άλλους παίζει και σε άλλους όχι :S

Εγώ το δοκίμασα τοπικά και σε online java compiler και έδειξε σωστά και στα 2

Πιθανόν ισχύει αυτό που γράφει ο άνθρωπος στο τελευταίο σχόλιο της πρώτης απάντησης του παρακάτω link:

java - Wrong year in time conversion for final day of the year - Stack Overflow

"... In the ISO week scheme used in many countries Monday is the first day of the week, so the week year of that Sunday will be 2017, that is, correct in this case. " ίσως έχει να κάνει και με το region (τι έχει δηλώσει ο χρήστης στις ρυθμίσεις) στον κάθε υπολογιστή.

1 ώρα πριν, Lanike71 είπε

θα το δοκιμάσω και θα σου πω @marios28.

Από αυτά που διάβασα στο stack, μάλλον είναι η λύση.

Ευχαριστώ.

ΥΓ. Ίσως είναι η μοναδική φορά σε κώδικα, που μπορεί να ισχύει το "κάνε υπομονή λίγες μέρες και πού θα πάει, θα παίξει".

Χαχαχα...

χαχα Ναι. Όταν σου έγραφα σε λίγο θα παίζει πάλι είχα πέσει κάτω. Δοκίμασέ το, λογικά αυτό είναι το πρόβλημα.

Επεξ/σία από marios28
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Στις 2/1/2021 στις 1:22 ΜΜ, filip123go είπε

Το να δουλεύεις με Dates στην java είναι από τα χειρότερα τασκ ever. (Έκανα πρόσφατα ένα φουλ διαχειριστικό για κρατήσεις δωματίων και μου βγηκε η πίστη με τα dates).

Αν βγάλεις το pattern και αφήσεις το default,πάλι το ίδιο σου κάνει; 

Είχα παρόμοιο πρόβλημα με την μετατροπή σε milliseconds. Δεν μου έβαζε τα 2 τελευταία ψηφία στη μετατροπή για κάποιο λόγο. Στο epoch converter όμως, τα έβαζε κανονικά. Και άλλο date έπαιρνα στο πρόγραμμα , και άλλο στον converter. Να τρελαίνεσαι...

Το να δουλεύεις με dates σιγουρα δεν ειναι και οτι πιο ευχαρισμο, αλλα γινεται αρκετα χειροτερο οταν εχεις να παιξεις με διαφορετικά timezones....

  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Στις 3/1/2021 στις 4:50 ΜΜ, tsofras είπε

Ωραίος , βέβαια το παραπάνω δεν λύνει την απορία γιατί σε άλλους παίζει και σε άλλους όχι :S

Εγώ το δοκίμασα τοπικά και σε online java compiler και έδειξε σωστά και στα 2

Εχει να κανει με τα Regional Settings του Καθε Υπολογιστη.
Και για να μην μπλεκουμε με αυτα παντα χρησιμοποιουμε Unix DateTime format σε ολες τις πραξεις.
το τι δειχνουμε στο GUI ειναι αλλο θεμα εκει κανουμε formatting.
 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
2 λεπτά πριν, papmel είπε

Εχει να κανει με τα Regional Settings του Καθε Υπολογιστη.
Και για να μην μπλεκουμε με αυτα παντα χρησιμοποιουμε Unix DateTime format σε ολες τις πραξεις.
το τι δειχνουμε στο GUI ειναι αλλο θεμα εκει κανουμε formatting.
 

Ναι το φαντάστηκα αυτό ήταν και το πρώτο που ρώτησα αλλά τι διαφορά να έχουν οι υπόλοιποι άραγε που να έχουν διαφορετικό week day

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Μόλις τώρα, tsofras είπε

Ναι το φαντάστηκα αυτό ήταν και το πρώτο που ρώτησα αλλά τι διαφορά να έχουν οι υπόλοιποι άραγε που να έχουν διαφορετικό week day

Πρεπει να κανεις detect τα regional Settings και θα σου δειξει την διαφορα δεν ξερω java πως γινετε αλλα στην pascal σε καθε εφαρμογη οριζεις εσυ τα decimal αν ειναι τελεια η κομα και το πως θες να εμφανιζετε η ωρα η ημερομηνια 
αν δηλαδη πες να κανεις Convert το 2020-01-31 00:00:00 μπορει να παρεις Error γιατι αν δεν εχεις ορισει εσυ  τι να ψαχνει θα το θέλει σαν default δηλαδη 31/01/2020 00:00 ή και ακομα 01/31/2020 αν εχεις usa regional settigns.
 

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0
Δημοσ. (επεξεργασμένο)
17 λεπτά πριν, tsofras είπε

Ναι το φαντάστηκα αυτό ήταν και το πρώτο που ρώτησα αλλά τι διαφορά να έχουν οι υπόλοιποι άραγε που να έχουν διαφορετικό week day

Όχι timezone, αλλά διαφορετικό region-country. Μπορεί να έχουν ίδιο timezone (π.χ. Αθήνα), αλλά διαφορετική ρύθμιση επιλογής στη χώρα ή διαφορετικό regional format. π.χ. Ο ένας υπολογιστής να έχει ρύθμιση χώρα Aμερική και ο δεύτερος Ελλάδα με ίδιο timezone. Οπότε η συγκεκριμένη (week day) θα είναι διαφορετική, λόγω διαφορετικής χώρας. π.χ. όπως ακριβώς συμβαίνει και με τη θέση μήνα/ημέρας στη γραφή της ημερομηνίας.

Επεξ/σία από marios28
  • Like 1
Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Τι σχέση μπορεί να έχουν τα regional settings; Το πρόβλημά μου δεν είναι αν έχει τελεία, κόμμα ή παύλα στην εμφάνιση, είναι ότι επέστρεφε λάθος ημερομηνία.Μάλλον για να είμαι σωστός, σωστά την επέστρεφε, απλά εγώ νόμιζα ότι επέστρεφε κάτι άλλο.

Βέβαια εγώ δεν κατάλαβα ακόμα πού μπορεί να βοηθάει το ΥΥΥΥ.

Δηλαδή, αν έκανα ένα java.lang.System.currentTimeMillis() και μετά το μετέτρεπα σε date, τι διαφορά θα είχε; Ημερομηνία υπολογιστή πάλι θα έπαιρνα.

Καμία, αφού και το localDate.now( ) τν ίδια δουλειά κάνει, επιστρέφει ημερομηνία. Απλά χρειαζόταν το yyyy που κάνει εντελώς άλλη δουλειά σε σχέση με το ΥΥΥΥ.

Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.