Η time.time() της Python επιστρέφει το τοπικό ή το UTC timestamp;

Η time.time() στην ενότητα time της Python επιστρέφει την ώρα του συστήματος ή την ώρα σε UTC;

Λύση

Η συνάρτηση time.time() επιστρέφει τον αριθμό των δευτερολέπτων από την εποχή, ως δευτερόλεπτα. Σημειώστε ότι η "εποχή" ορίζεται ως η αρχή της 1ης Ιανουαρίου 1970 σε UTC. Έτσι, η εποχή ορίζεται σε όρους UTC και καθορίζει μια παγκόσμια χρονική στιγμή. Ανεξάρτητα από το πού βρίσκεστε "δευτερόλεπτα μετά την εποχή" (time.time()) επιστρέφει την ίδια τιμή την ίδια στιγμή.

Ακολουθεί κάποιο δείγμα εξόδου που έτρεξα στον υπολογιστή μου, μετατρέποντάς το επίσης σε συμβολοσειρά.

Python 2.7.3 (default, Apr 24 2012, 00:00:54) 
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> ts = time.time()
>>> print ts
1355563265.81
>>> import datetime
>>> st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
>>> print st
2012-12-15 01:21:05
>>>

Η μεταβλητή ts είναι ο χρόνος που επιστρέφεται σε δευτερόλεπτα. Στη συνέχεια τη μετέτρεψα σε συμβολοσειρά χρησιμοποιώντας τη βιβλιοθήκη datetime, καθιστώντας την μια συμβολοσειρά που είναι αναγνώσιμη από τον άνθρωπο.

Σχόλια (12)

Πρόκειται για την μορφή κειμένου μιας χρονοσφραγίδας που μπορεί να χρησιμοποιηθεί στα αρχεία κειμένου σας. (Ο τίτλος της ερώτησης ήταν διαφορετικός στο παρελθόν, οπότε η εισαγωγή αυτής της απάντησης άλλαξε για να διευκρινιστεί πώς θα μπορούσε να ερμηνευτεί ως ώρα. [ενημέρωση 2016-01-14])

Μπορείτε να λάβετε τη χρονοσφραγίδα ως συμβολοσειρά χρησιμοποιώντας την .now() ή την .utcnow() της datetime.datetime:

>>> import datetime
>>> print datetime.datetime.utcnow()
2012-12-15 10:14:51.898000

Το now διαφέρει από το utcnow όπως αναμενόταν -- κατά τα άλλα λειτουργούν με τον ίδιο τρόπο:

>>> print datetime.datetime.now()
2012-12-15 11:15:09.205000

Μπορείτε να αποδώσετε τη χρονοσφραγίδα στο αλφαριθμητικό ρητά:

>>> str(datetime.datetime.now())
'2012-12-15 11:15:24.984000'

Ή μπορείτε να είστε ακόμα πιο σαφείς για να μορφοποιήσετε το timestamp με τον τρόπο που θέλετε:

>>> datetime.datetime.now().strftime("%A, %d. %B %Y %I:%M%p")
'Saturday, 15. December 2012 11:19AM'

Αν θέλετε τη μορφή ISO, χρησιμοποιήστε τη μέθοδο .isoformat() του αντικειμένου:

>>> datetime.datetime.now().isoformat()
'2013-11-18T08:18:31.809000'

Μπορείτε να τα χρησιμοποιήσετε σε μεταβλητές για υπολογισμούς και εκτύπωση χωρίς μετατροπές.

>>> ts = datetime.datetime.now()
>>> tf = datetime.datetime.now()
>>> te = tf - ts
>>> print ts
2015-04-21 12:02:19.209915
>>> print tf
2015-04-21 12:02:30.449895
>>> print te
0:00:11.239980
Σχόλια (6)

Με βάση την απάντηση από τον #squiguy, για να λάβετε μια πραγματική χρονοσφραγίδα θα την έδινα από float.

>>> import time
>>> ts = int(time.time())
>>> print(ts)
1389177318

Τουλάχιστον αυτή είναι η έννοια.

Σχόλια (9)