Μετατροπή μορφοποιημένης συμβολοσειράς dd/mm/yyyyyy σε Datetime

Είμαι νέος στο DotNet και τη C#. Θέλω να μετατρέψω μια συμβολοσειρά σε μορφή mm/dd/yyyyyy σε αντικείμενο DateTime. Δοκίμασα τη συνάρτηση ανάλυσης όπως παρακάτω, αλλά εμφανίζει σφάλμα χρόνου εκτέλεσης.

DateTime dt=DateTime.Parse("24/01/2013");

Καμία ιδέα για το πώς μπορώ να το μετατρέψω σε datetime;

Λύση

Πρέπει να χρησιμοποιήσετε το DateTime.ParseExact με τη μορφή "dd/MM/yyyy"

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Είναι ασφαλέστερο να χρησιμοποιήσετε d/M/yyyy για τη μορφή, καθώς αυτό θα χειριστεί τόσο μονοψήφιες όσο και διψήφιες ημέρες/μήνες. Αλλά αυτό εξαρτάται πραγματικά από το αν περιμένετε μονοψήφιες/διψήφιες τιμές.


Η δική σας μορφή ημερομηνίας ημέρα/μήνας/έτος μπορεί να είναι μια αποδεκτή μορφή ημερομηνίας για ορισμένους πολιτισμούς. Για παράδειγμα, για την καναδική κουλτούρα en-CA η DateTime.Parse θα λειτουργούσε ως εξής: "Η ημερομηνία και η ώρα είναι η ημερομηνία που θα έπρεπε να είναι η ημερομηνία και η ώρα που θα έπρεπε να είναι η ημερομηνία και η ώρα που θα έπρεπε να είναι η ημερομηνία:

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

Ή

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture

Και οι δύο παραπάνω γραμμές θα λειτουργούσαν επειδή η μορφή της συμβολοσειράς είναι αποδεκτή για την κουλτούρα en-CA. Εφόσον δεν παρέχετε κάποια κουλτούρα στην κλήση DateTime.Parse, η τρέχουσα κουλτούρα σας χρησιμοποιείται για την ανάλυση η οποία δεν υποστηρίζει τη μορφή ημερομηνίας. Διαβάστε περισσότερα σχετικά στο DateTime.Parse.


Μια άλλη μέθοδος για την ανάλυση είναι η χρήση της DateTime.TryParseExact

DateTime dt;
if (DateTime.TryParseExact("24/01/2013", 
                            "d/M/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None,
    out dt))
{
    //valid date
}
else
{
    //invalid date
}

Η ομάδα μεθόδων TryParse στο πλαίσιο .Net δεν πετάει εξαιρέσεις σε μη έγκυρες τιμές, αλλά επιστρέφει μια τιμή bool που δείχνει την επιτυχία ή την αποτυχία της ανάλυσης.

Παρατηρήστε ότι έχω χρησιμοποιήσει απλά d και M για την ημέρα και τον μήνα αντίστοιχα. Τα απλά d και M λειτουργούν τόσο για μονοψήφια/διψήφια ψηφία ημέρας όσο και για μήνα. Έτσι, για τη μορφή d/M/yyyy οι έγκυρες τιμές θα μπορούσαν να είναι:

  • "24/01/2013&quot,
  • "24/1/2013&quot,
  • "4/12/2013" //4 Δεκεμβρίου 2013
  • "04/12/2013&quot,

Για περαιτέρω ανάγνωση θα πρέπει να δείτε: Για να διαβάσετε περισσότερα, θα πρέπει να διαβάσετε το άρθρο: "Ορίστε, το βιβλίο του κ: Προσαρμοσμένες συμβολοσειρές μορφοποίησης ημερομηνίας και ώρας

Σχόλια (3)

use DateTime.ParseExact

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)

Το null θα χρησιμοποιήσει την τρέχουσα κουλτούρα, κάτι που είναι κάπως επικίνδυνο. Προσπαθήστε να δώσετε μια συγκεκριμένη κουλτούρα

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
Σχόλια (1)

Μπορείτε να χρησιμοποιήσετε τη μορφή "dd/MM/yyyy" για να τη χρησιμοποιήσετε στο DateTime.ParseExact.

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

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

Εδώ είναι ένα DEMO.

Για περισσότερες πληροφορίες, δείτε το Custom Date and Time Format Strings.

Σχόλια (0)