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

[Λύθηκε] String to Date Convert n Fomat


Evangeli

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

Δημοσ.

Καλησπέρα σε όλους.

 

Για ακόμα μια φορά χρειάζομαι την σημαντική βοήθεια σας. Ο κώδικας που ακολουθεί είναι η προσπάθεια μου για α) την ανάγνωση 2 strings από κάθε σειρά του .txt

 

αρχείου. Η κάθε σειρά έχει την εξής δομή:

2009-06-28 2

2009-06-29 1

2009-05-01 6

2009-07-16 3

...

 

με το πρώτο string να εκφράζει μια ημερομηνία ενώ το δεύτερο string έναν ακέραιο. β) την μετατροπή του πρώτου string σε date και του δεύτερου σε int. Με το

 

δεύτερο είμαι εντάξει. Το πρόβλημα μου αφορά τη πρώτη μετατροπή. Όπως είπα, το format που είναι τώρα το String-Date είναι 2009-06-28. Εγώ χρειάζομαι 1) την

 

μετατροπή του String-Date σε Date παράλληλα με 2) την αλλαγή του format σε 28/6/2009.

 

Τέλος, τα αποτελέσματα που παίρνω αυτή την στιγμή είναι κάπως έτσι:

sDate: 2009-05-18

date: Sun Jan 18 00:05:00 EET 2009

sOccurrence: 1

iOccurrences: 1

...

 

 

>try {   
   myArray = new Object[numOfLines][2];

   // Read the file line-by-line
   while ( (strLine = br.readLine()) != null ) {
       // Print the content on the console
       //System.out.println(strLine);

       StringTokenizer stringTokenizer = new StringTokenizer(strLine);
       numOfTokens += stringTokenizer.countTokens();
       j = 0;

       // Store all the data to a table
       while (stringTokenizer.hasMoreTokens()) {
           // Format pou exw: 2009-06-28
           // Format pou 8elw: 23/1/1985
           sDate = stringTokenizer.nextToken();
           System.out.println("sDate: " + sDate);
           String str_date = sDate;
           SimpleDateFormat formatter ;
           Date date ;
           formatter = new SimpleDateFormat("yyyy-mm-dd");
           date = (Date)formatter.parse(str_date);
           Calendar cal = Calendar.getInstance();
           cal.setTime(date);
           System.out.println("date: " + date);

           sOccurrence = stringTokenizer.nextToken();
           System.out.println("sOccurrence: " + sOccurrence);
           iOccurrence = Integer.parseInt(sOccurrence);
           System.out.println("iOccurrences: " + iOccurrence);
           myArray[j][0] = new Integer(iOccurrence);

           j++;
       }
   }

   System.out.println("Number of total tokens generated: " + numOfTokens);
} catch (Exception e) {
   // Catch exception if any
   System.err.println("Error: " + e.getMessage());
}

 

 

Προσπάθησα αρκετά αλλά δεν μπορώ να βρω κάτι. Ίσως φταίει ότι με πιέζει ο χρόνος. Οποιαδήποτε ιδέα είναι καλοδεχούμενη

 

Βαγγέλης.

Δημοσ.

>    
   public String DATE_TO_STRING(java.util.Date date) throws NullPointerException{
       SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
       return sdf.format(date);
   }

   public Date STRING_TO_DATE(String stringDate) throws ParseException{
       SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
       return sdf.parse(stringDate);
   }

 

με βάση τα παραπάνω κάνεις αλλαγές, αν χρειαστεί...

Δημοσ.
>    
   public String DATE_TO_STRING(java.util.Date date) throws NullPointerException{
       SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
       return sdf.format(date);
   }

   public Date STRING_TO_DATE(String stringDate) throws ParseException{
       SimpleDateFormat sdf = new SimpleDateFormat("dd/M/yyyy");
       return sdf.parse(stringDate);
   }

 

με βάση τα παραπάνω κάνεις αλλαγές, αν χρειαστεί...

 

Σ' ευχαριστώ φίλε natural_sgf για την άμεση απάντηση! Προσπαθώ με μια εντολή τύπου myArray[j][0] = new Date(dDate); να καταχωρίσω την συγκεκριμένη ημερομηνία σε ένα πίνακα τύπου myArray = new Object[numOfLines][2]; αλλα το Netbeans μου λέει οτι δεν υπάρχει Constractor τέτοιου τύπου LOL! Τι μπορώ να κάνω? Κάτι έχω διαβάσει για τον τύπο Calendar αλλα δεν γνωρίζω πως να τον χρησιμοποιήσω... Και κάτι ακόμα. Και αυτή την φορά η ημερομηνία εμφανίζεται υπο την εξής μορφή: Wed Dec 10 00:00:00 EET 2008. Μπορώ να την φορμάρω στην μορφή 23/1/1985.

Το ειδανικό σενάριο θα ήταν να μπορώ να απομονόσω τα a) year B) date c) month!

Δημοσ.

το myArray το έχεις δηλώσει τύπου Object οπότε δυο πιθανές λύσεις:

1. το δηλώνεις myArray = new Date[numOfLines][2];

2. το κρατάς όπως ειναι και το Date το κανεις cast σε Object(upcast δηλαδή) πρωτού το κάνεις ανάθεση σε στοιχείο του πίνακα...μετά βεβαια, για να το χρησιμοποιήσεις πρεπει να το κάνεις πάλι downcast σε τύπο Date...

 

Για το δευτερο σκέλος της ερώτησης, κοίτα αυτό και αυτό και φυσικά το Java API που έχεις παραβλέψει να συμβουλευτείς...

Δημοσ.
το myArray το έχεις δηλώσει τύπου Object οπότε δυο πιθανές λύσεις:

1. το δηλώνεις myArray = new Date[numOfLines][2];

 

Στην περίπτωση αυτή όμως θα μπορώ να αποθηκεύω int τιμές στα κελιά Date[...κάτι...][1]? ή όλα τα κελιά είτε βρίσκοντε στην πρώτη είτε στην δευτερη στήλη θα "δέχοντε" αποκλειστικά dates?

Δημοσ.

αφού θες να αποθηκεύσεις διαφορετικού τύπου δεδομένα κ αν πρέπει και καλά να κάνεις χρήση δισδιάστατου πίνακα ακολούθησε τον δεύτερο τρόπο χρησιμοποιώντας παράλληλα το instanceof για να καταλάβεις τι είδους αντικείμενο έχεις προτού το κάνεις downcast...

Δημοσ.
αφού θες να αποθηκεύσεις διαφορετικού τύπου δεδομένα κ αν πρέπει και καλά να κάνεις χρήση δισδιάστατου πίνακα ακολούθησε τον δεύτερο τρόπο χρησιμοποιώντας παράλληλα το instanceof για να καταλάβεις τι είδους αντικείμενο έχεις προτού το κάνεις downcast...

 

Okay. Επειδή βλέπω οτι το πράγμα δυσκολεύει και δε μπορώ σε αυτή την φάση να καλύψω ότι ασχετοσύνη έχω, λέω να κάνω τα εξής και μου λες αν θες την γνώμη σου. Φτιάχνω δυο μονοδιάστατους πίνακες με το ίδιο πλήθος στοιχείων. Έναν για τύπου ακραίων και έναν τύπου Date. Τους δηλώνω έχω εξής: num = new int; Πως όμως δηλώνω και τον πίνακα των dates? Μήπως η μόνη λύση είναι με ArrayList?

 

>
ArrayList<Date> a = new ArrayList<Date>();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
DateCompare compare = new DateCompare();
try
{
       Date three = df.parse("1991-10-01");
       a.add(today);
}

 

Μετά κάνω απλά αντιστοίχηση. π.χ. το 1 στοιχείο της arraylist αντιστοιχίζεται με το 1 του int-πίνακα. Επειδή όμως είναι ανάγκη να γνωρίζω ανά πάσα στιγμή τα έτος,μήνας,ημέρα της κάθε ημερομηνίας, μπορώ να κάνω ανάκτηση των πληροφοριών αυτών με κάποια συνάρτηση της java?

Δημοσ.

ξέρεις τι ειναι struct στη C? αν θες να κάνεις το αντιστοιχο του struct στη Java πως θα το έκανες;;;

 

τέλως πάντων...η λύση, για να μη το κάνεις πιο πολύπλοκο απ' ότι πρέπει, ειναι να δηλώνεις μια κλάση

 

>
private class MyStruct {
private Date date;
private int num;
//constructor
MyStruct(Date date, int num){
	this.date = date;
	this.num = num;
}
protected Date getDate(){
	return this.date;	
}
protected void setDate(Date date){
	this.date = date;
}
protected int getNum(){
	return this.num;	
}
protected void setNum(int num){
	this.num = num;
}	
}

 

οπότε κάνοντας χρήση του παρακάτω κώδικα

 

>private java.util.List<MyStruct> myList = new ArrayList<MyStruct>(DEFINE_YOUR_NUMBER);
Date today = new Date();
MyStruct newMyStruct = new MyStruct(today, 1);
myList.add(newMyStruct); 

 

θα έχεις το επιθυμητό αποτελεσμα...τα υπολοιπα ψάξτα μόνος σου...

Όσον αφορά το Year που λες κοιτα το link που αναφέρομαι στο Java API πιο πάνω καθώς σε παραπέμπω απευθειας στην κλάση Calendar και συγκεκριμένα στο πεδίο YEAR...

καλή συνέχεια...

Δημοσ.
δεν ξέρω αν θέλεις κάτι σαν αυτό

δες το και πες μου

 

Παίδες σας ευχαριστώ όλους. Τελικά το πρόβλημα ήταν μπροστά στα μάτια μου. Το έλυσα με άλλο τρόπο χωρίς να παίζω με java και jExcelAPI. Για την ιστορία, κατάφερα να υλοποιήσω αυτό που θέλω με κάποια τροποποίηση τον κώδικα που μου έστειλε ο virxen75. Έμεινε μόνο μια μικρή λεπτομέρεια που ίσως λυνόταν με αλχημείες του excel. Απλά σκέφτηκα ότι από την στιγμή τα δεδομένα ήταν ήδη αποθηκευμένα σε txt σε μορφή space separated values πολύ απλά θα μπορούσαν να γίνουν import από αυτό και το καλύτερο: Αναγνωρίζοντας από μόνο του αν οι τιμές είναι τύπου date, number κλπ κλπ. Τελικά μερικές φορές η λύση είναι πολύ πιο απλή απ όσο περιμένουμε! Ευχαριστώ και πάλι!!!

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...