Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

Îåêßíçóå áðü ôï ìÝëïò greekwow. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 18-02-2009, 15:14. Υπάρχουν 15 απαντήσεις.
Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-02-2009, 21:40 48508

    Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    visual basic 2008

    έχω την μεταβλητή mydate και σε αυτήν περνάω τα δεδομένα απο ενα db αρχειο με την μορφή "2/17/2009 8:30:00 PM""

    πχ:

    dim mydate as string

    mydate="2/17/2009 8:30:00 PM"

    πώς μπορώ να μεταφέρω το περιεχόμενο αυτής της μεταβλητής σε μια variable τύπου date ώστε να μπορώ μετά να την συγκρίνω με την ημερομηνία ενός datepicker; (να πέρνει και την ημερομηνία και την ώρα)

     

    ευχαριστώ προκαταβολικά

  •  17-02-2009, 21:57 48509 σε απάντηση της 48508

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Θα πρέπει να χρησιμοποιήσεις την DateTime.Parse ή την DateTime.ParseExact.


    Vir prudens non contra ventum mingit
  •  17-02-2009, 21:59 48510 σε απάντηση της 48509

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    ευχαριστώ πολύ για την απάντηση

    μήπως γίνεται να μου πείτε ακριβώς τον κώδικα;

  •  17-02-2009, 22:24 48511 σε απάντηση της 48510

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Οι σύνδεσμοι που σου παρέθεσα σε βγάζουν σε αντίστοιχες σελίδες με τρεις διαφορετικές συντάξεις για κάθε ένα από τα δύο methods. Κάθε σύνταξη έχει και αντίστοιχο παράδειγμα. Πραγματικά δεν έχω κάτι καλύτερο να γράψω ως παράδειγμα. Το ποια μέθοδο και ποια σύνταξη θα χρησιμοποιήσεις εξαρτάται, ανάλογα με τις ανάγκες σου.


    Vir prudens non contra ventum mingit
  •  17-02-2009, 22:28 48512 σε απάντηση της 48511

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Dim s As String

    Dim returnValue As DateTime

    s = "22/2/2009 2:30:00 PM"

    returnValue = DateTime.Parse(s)

    MsgBox(s)

    ------------

    το "21/1/2009 2:30:00 PM" το δέχεται αλλα το "1/21/2009 2:30:00 PM" δεν το δέχεται και αυτό γιατί στην πρώτη περίπτωση η ημέρα ειναι πρώτα και μετά ειναι ο μήνας

     

    τι μπορώ να κάνω για να το δέχεται ανάποδα;

    με λιγα λόγια θέλω να μετατρέψω  το 1/21/2009 2:30:00 PM σε 21/1/2009 2:30:00 PM

  •  17-02-2009, 22:56 48515 σε απάντηση της 48512

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Κοίτα στο παράδειγμα εδώ: http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    Πρέπει να κάνεις κάτι ανάλογο με "dd/MM/yyyy h:mm:ss tt"


    Vir prudens non contra ventum mingit
  •  17-02-2009, 23:27 48516 σε απάντηση της 48515

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    και τι δεν δοκίμασα χωρίς αποτέλεσμα

     

    οποιοσδήποτε μπορεί να μου δώσει εναν απλό κώδικα θα του ήμουν ευγνώμων

  •  18-02-2009, 00:30 48517 σε απάντηση της 48516

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Λοιπόν πρώτα θα πάρεις την ημερομηνία μόνο και θα την βάλεις σε μια date μεταβλητή. Αυτό μπορεί να γίνει με πολλούς τρόπους παρακάτω ένας, αν έχεις απορρίψει τους παραπάνω: Dim myString As String = "21/1/2009 2:30:00 PM" Dim myDAte As Date = DateSerial(CType(myString.Substring(5, 4), Integer), CType(myString.Substring(3, 1), Integer), CType(myString.Substring(0, 2), Integer)) (εννοείτε με λίγη φροντίδα ο κώδικας γίνεται πιο γενικός) Μετά κάνεις ένα έλεγχο στο string αν είναι AM ή PM και με την DateAdd προσθέτεις ώρες και λεπτά ή ώρες + 24 και λεπτά.
    Manos
  •  18-02-2009, 08:30 48520 σε απάντηση της 48516

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    greekwow:

    και τι δεν δοκίμασα χωρίς αποτέλεσμα

     

    οποιοσδήποτε μπορεί να μου δώσει εναν απλό κώδικα θα του ήμουν ευγνώμων

     

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

    Ορίστε απλός κώδικας:

    Dim dateString, format As String
    Dim result As Date
    Dim provider As CultureInfo = CultureInfo.InvariantCulture

    ' Parse date and time with custom specifier.
    dateString = "Sun 15 Jun 2008 8:30 AM -06:00"
    format = "ddd dd MMM yyyy h:mm tt zzz"
    Try
      result = Date.ParseExact(dateString, format, provider)
      Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
    Catch e As FormatException
      Console.WriteLine("{0} is not in the correct format.", dateString)
    End Try

    Πρόκειται για τον ίδιο κώδικα που έχει στο MSDN, μόνο που θα πρέπει να βάλεις το "dd/MM/yyyy h:mm:ss tt" ως format. Το δοκίμασες και δεν παίζει;

     

     

     


    Vir prudens non contra ventum mingit
  •  18-02-2009, 08:55 48521 σε απάντηση της 48516

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    greekwow:

    και τι δεν δοκίμασα χωρίς αποτέλεσμα

     

    οποιοσδήποτε μπορεί να μου δώσει εναν απλό κώδικα θα του ήμουν ευγνώμων

    Η DateTime.Parse είναι μόνο μία γραμμή. Ποιό απλό δεν γίνεται.

    Υποψιάζομαι ότι το πρόβλημα σου δεν έχει να κάνει με το parsing αλλά με το locale του υπολογιστή σου. Η DateTime.Parse μεταφράζει τα strings χρησιμοποιώντας τις ρυθμίσεις του χρήστη για την ημερομηνία που είναι ΚΑΛΟ ΠΡΑΓΜΑ. Οι ημερομηνίες που μας δίνεις είναι σε αμερικάνικη μορφή. Αν το μηχάνημα σου είναι ρυθμισμένο σε ελληνική γλώσσα, η ημερομηνία 2/11/2009 θα μεταφραστεί σε 2 Νοεμβρίου, ενώ η 2/17/2009 θα αποτύχει.

    Το πραγματικό πρόβλημα σε τέτοιες περιπτώσεις είναι ότι αποθήκευσες την ημερομηνία ως string σε κάποιο σημείο ενώ δεν έπρεπε. Στην περίπτωση σου, στη βάση. Αν αποθήκευσες την ημερομηνία ως string από ένα μηχάνημα με αμερικάνικο locale, η σημερινή ημερομηνία (18/2) θα αποθηκεύτηκε ως 2/18. Όταν πας να την διαβάσεις από ελληνικό μηχάνημα, το parsing λογικά θα αποτύχει. Μπορείς μεν να πεις στην DateTime.Parse ποιό locale να χρησιμοποιήσει, αλλά αυτό είναι απλά πασάλειμα και επίδεσμος. Η σωστή λύση είναι να αποθηκεύσεις την ημερομηνία στη βάση σωστά. Όλες οι βάσεις δεδομένων υποστηρίζουν πεδία date, οπότε δεν πρέπει να έχεις πρόβλημα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-02-2009, 12:15 48526 σε απάντηση της 48521

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Παναγιώτης Καναβός:
    greekwow:

    και τι δεν δοκίμασα χωρίς αποτέλεσμα

     

    οποιοσδήποτε μπορεί να μου δώσει εναν απλό κώδικα θα του ήμουν ευγνώμων

    Η DateTime.Parse είναι μόνο μία γραμμή. Ποιό απλό δεν γίνεται.

    Υποψιάζομαι ότι το πρόβλημα σου δεν έχει να κάνει με το parsing αλλά με το locale του υπολογιστή σου. Η DateTime.Parse μεταφράζει τα strings χρησιμοποιώντας τις ρυθμίσεις του χρήστη για την ημερομηνία που είναι ΚΑΛΟ ΠΡΑΓΜΑ. Οι ημερομηνίες που μας δίνεις είναι σε αμερικάνικη μορφή. Αν το μηχάνημα σου είναι ρυθμισμένο σε ελληνική γλώσσα, η ημερομηνία 2/11/2009 θα μεταφραστεί σε 2 Νοεμβρίου, ενώ η 2/17/2009 θα αποτύχει.

    Το πραγματικό πρόβλημα σε τέτοιες περιπτώσεις είναι ότι αποθήκευσες την ημερομηνία ως string σε κάποιο σημείο ενώ δεν έπρεπε. Στην περίπτωση σου, στη βάση. Αν αποθήκευσες την ημερομηνία ως string από ένα μηχάνημα με αμερικάνικο locale, η σημερινή ημερομηνία (18/2) θα αποθηκεύτηκε ως 2/18. Όταν πας να την διαβάσεις από ελληνικό μηχάνημα, το parsing λογικά θα αποτύχει. Μπορείς μεν να πεις στην DateTime.Parse ποιό locale να χρησιμοποιήσει, αλλά αυτό είναι απλά πασάλειμα και επίδεσμος. Η σωστή λύση είναι να αποθηκεύσεις την ημερομηνία στη βάση σωστά. Όλες οι βάσεις δεδομένων υποστηρίζουν πεδία date, οπότε δεν πρέπει να έχεις πρόβλημα.

    Ακριβώς αυτό ειναι το πρόβλημα μου. ότι στην βάση που έχω η ημερομηνία ειναι απο αγγλικό μηχάνημα και για αυτό η parse αποτυχάνει.

    το κακό ειναι ότι την βάση την πέρνω έτοιμη και πως θα πρέπει χειροκίνητα να την αλάζω εγώ για αυτό και ψάχνω τρόπο να την μετατρέπει η VB αυτόματα

  •  18-02-2009, 12:35 48529 σε απάντηση της 48526

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Το πρόβλημα είναι ότι έχουμε φτάσει τα 10 μηνύματα και δεν έχεις γράψει ούτε μία γραμμή κώδικα για να δούμε τι συμβαίνει... Έτσι δεν γίνεται δουλειά.
    Vir prudens non contra ventum mingit
  •  18-02-2009, 13:19 48531 σε απάντηση της 48529

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Ωραια λοιπόν έχουμε τα εξής:

    dim db_imerominia as string

    dim mydate as datetime

    db_imerominia= ds.Tables("mydb").Rows(I).Item(4)  'σε αυτό το πεδίο της database υπάρχει αυτό το περιεχόμενο "2/18/2009 2:30:00 PM"

    mydate = DateTime.Parse(db_imerominia)

    οταν το τρέχω μου δείχνει :σφάλμα: Η συμβολοσειρά δεν αναγνωρίστηκε ως έγκυρο DateTime.

    θέλω να περάσω στην μεταβλητή mydate το περιεχόμενο της db_imerominia όμως επειδή έχει μορφή 2/18/2009 και όχι 18/2/2009 μου ενφανίζει αυτό το σφάλμα. πως μπορώ να το διορθώσω;

  •  18-02-2009, 13:49 48532 σε απάντηση της 48531

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    Μου φαίνεται δεν έκανες τον κόπο να διαβάσεις αυτά που σου έγραψα. Γιατί θα είχες δει την εναλλακτική σύνταξη της Parse όπου στα παραδείγματα έχει ακριβώς αυτό που ψάχνεις. Όπως και να έχει θα είχες καταλήξει σε κάτι τέτοιο:

    Dim culture As CultureInfo
    dim db_imerominia as string
    dim mydate as datetime
    db_imerominia=ds.Tables("mydb").Rows(I).Item(4)
    culture = CultureInfo.CreateSpecificCulture("en-US")
    styles = DateTimeStyles.None
    mydate = DateTime.Parse(db_imerominia, culture, styles)

    Ο παραπάνω κώδικας προϋποθέτει ότι όντως είναι σε αμερικάνικο format η ημερομηνία και ότι η βάση δεν περιέχει λανθασμένες ημερομηνίες. Διαφορετικά θα πρέπει να βάλεις την τελευταία γραμμή σε Try/Catch όπως στο παράδειγμα.

     


    Vir prudens non contra ventum mingit
  •  18-02-2009, 14:07 48533 σε απάντηση της 48532

    Απ: Πως να μετατρέψω μια ημερομηνία-ώρα απο string σε date;

    KelMan:

    Μου φαίνεται δεν έκανες τον κόπο να διαβάσεις αυτά που σου έγραψα. Γιατί θα είχες δει την εναλλακτική σύνταξη της Parse όπου στα παραδείγματα έχει ακριβώς αυτό που ψάχνεις. Όπως και να έχει θα είχες καταλήξει σε κάτι τέτοιο:

    Dim culture As CultureInfo
    dim db_imerominia as string
    dim mydate as datetime
    db_imerominia=ds.Tables("mydb").Rows(I).Item(4)
    culture = CultureInfo.CreateSpecificCulture("en-US")
    styles = DateTimeStyles.None
    mydate = DateTime.Parse(db_imerominia, culture, styles)

    Ο παραπάνω κώδικας προϋποθέτει ότι όντως είναι σε αμερικάνικο format η ημερομηνία και ότι η βάση δεν περιέχει λανθασμένες ημερομηνίες. Διαφορετικά θα πρέπει να βάλεις την τελευταία γραμμή σε Try/Catch όπως στο παράδειγμα.

     

    σε ευχαριστώ για την απάντηση και να είσαι σίγουρος πως το δοκίμασα.

    αλλα μου ενφανίζει το εξής error σε αυτόν τον κώδικα

    name "cultureinfo" is not declared

     

     

Σελίδα 1 από 2 (16 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems