Anubis13 Δημοσ. 30 Μαρτίου 2015 Δημοσ. 30 Μαρτίου 2015 Θέλω να κάνω κάτι σαν το παρακατω με μια διαφορα >>> from datetime import datetime >>> dt_str = '9/24/2010 5:03:29' >>> dt_obj = datetime.strptime(dt_str, '%m/%d/%Y %I:%M:%S') >>> dt_obj datetime.datetime(2010, 9, 24, 17, 3, 29) Υπαρχει καποιος τροπος αν δεν δλινονται τα λεπτα και τα δευτερολεπτα να γινονται initialize στο 00?
pmav99 Δημοσ. 31 Μαρτίου 2015 Δημοσ. 31 Μαρτίου 2015 Η default τιμή τους μηδέν είναι αλλά θα πρέπει να δώσεις το σωστό argument στην strptime() >>> from datetime import datetime >>> dt_str = '9/24/2010 5' >>> dt_obj = datetime.strptime(dt_str, '%m/%d/%Y %I') >>> dt_obj datetime.datetime(2010, 9, 24, 5, 0) >>> dt_obj.strftime('%m/%d/%Y %I:%M:%S') '09/24/2010 05:00:00' Αν τα format στα οποία παίρνεις τα dt_str είναι μόνο δύο μπορείς να το κάνεις έτσι (στο try θα βάλεις το format που εμφανίζεται συχνότερα) try: dt_obj = datetime.strptime(dt_str, '%m/%d/%Y %I:%M:%S') except ValueError: dt_obj = datetime.strptime(dt_str, '%m/%d/%Y %I') Αν είναι περισσότερα τα formats, τότε μπορείς να επεκτείνεις την προηγούμενη λύση ως εξής: formats = ('%m/%d/%Y %I', '%m/%d/%Y %I:%M:%S',) for fmt in formats: try: dt_obj = datetime.strptime(dt_str, fmt) except ValueError: pass else: break else: raise ValueError("time data '%s' does not match any known format: %r" % (dt_str, formats)) Η λύση αυτή είναι καλύτερη ακόμα και όταν έχεις μόνο 2 expected formats γιατί θα σου δωσει σωστό exception αν λάβεις malformed input. Αν είναι πολλά τα expected formats (πχ 5+), σε απασχολεί το performance και το input σου είναι μοιρασμένο μεταξύ των διαφόρων formats, τότε θα είναι μάλλον καλύτερο να κάνεις με κάποιο τρόπο parse το dt_str, γιατί τα exceptions είναι σχετικά ακριβά (αλλά κάντο profile για να είσαι σίγουρος ότι αξίζει τον κόπο): formats = { 1: '%m/%d/%Y %I', 2: '%m/%d/%Y %I:%M', 3: '%m/%d/%Y %I:%M:%S', } no_of_semicolons = len(dt_str.split(":")) try: dt_obj = datetime.strptime(dt_str, formats[no_of_semicolons]) except (ValueError, KeyError): raise ValueError("time data '%s' does not match any known format: %r" % (dt_str, formats.values())) Αν τα βαριέσαι όλα αυτά και δεν σε πειράζει να χρησιμοποιήσεις κάποιο third party library μπορείς να χρησιμοποιήσεις το dateutil.parser.parse(), δίνοντας του fuzzy=True http://labix.org/python-dateutil#head-c0e81a473b647dfa787dc11e8c69557ec2c3ecd2 1
Anubis13 Δημοσ. 2 Απριλίου 2015 Μέλος Δημοσ. 2 Απριλίου 2015 (επεξεργασμένο) Eυχαριστω πολυ, το ειχα διαβασει το datetime module απλα μου ειχε ξεφυγει strptime και το strftime. Μία ερώτηση μόνο: date = datetime.datetime.strptime(time, "%Y/%m/%d-%H:%M:%S") To dash πετάει error λόγω αρνητικής τιμής, μπορώ κάπως να το αποφύγω? Επεξ/σία 2 Απριλίου 2015 από Anubis13
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα