Ημερομηνία μετατροπής / ώρα χρησιμοποιώντας time.mktime φαίνεται λάθος

ψήφοι
3
>>> import time
>>> time.strptime(01-31-2009, %m-%d-%Y)
(2009, 1, 31, 0, 0, 0, 5, 31, -1)
>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233378000.0
>>> 60*60*24 # seconds in a day
86400
>>> 1233378000.0 / 86400
14275.208333333334

time.mktimeθα πρέπει να επιστρέψει τον αριθμό των δευτερολέπτων από την εποχή. Επειδή είμαι δίνει μια ώρα τα μεσάνυχτα και η εποχή είναι τα μεσάνυχτα, δεν θα πρέπει το αποτέλεσμα να είναι ομοιόμορφα διαιρείται με τον αριθμό των δευτερολέπτων σε μια μέρα;

Δημοσιεύθηκε 22/08/2008 στις 08:06
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
3
mktime(...)
    mktime(tuple) -> floating point number

    Convert a time tuple in local time to seconds since the Epoch.

τοπική ώρα ... φανταχτερό αυτό.

Η ώρα πλειάδα:

The other representation is a tuple of 9 integers giving local time.
The tuple items are:
  year (four digits, e.g. 1998)
  month (1-12)
  day (1-31)
  hours (0-23)
  minutes (0-59)
  seconds (0-59)
  weekday (0-6, Monday is 0)
  Julian day (day in the year, 1-366)
  DST (Daylight Savings Time) flag (-1, 0 or 1)
If the DST flag is 0, the time is given in the regular time zone;
if it is 1, the time is given in the DST time zone;
if it is -1, mktime() should guess based on the date and time.

Παρεμπιπτόντως, φαίνεται να είναι 6 ωρών:

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233356400.0
>>> (1233378000.0 - 1233356400)/(60*60)
6.0
Απαντήθηκε 22/08/2008 στις 08:21
πηγή χρήστη

ψήφοι
0

Ενδιαφέρων. Δεν ξέρω, αλλά το έκανα δοκιμάστε το εξής:

>>> now = time.mktime((2008, 8, 22, 11 ,17, -1, -1, -1, -1))
>>> tomorrow = time.mktime((2008, 8, 23, 11 ,17, -1, -1, -1, -1))
>>> tomorrow - now
86400.0

το οποίο είναι ό, τι αναμενόταν. Η εικασία μου? Ίσως κάποια στιγμή η διόρθωση έγινε από την εποχή. Αυτό θα μπορούσε να είναι μόνο μερικά δευτερόλεπτα, κάτι σαν ένα δίσεκτο έτος. Νομίζω ότι άκουσα κάτι τέτοιο πριν, αλλά δεν μπορεί να θυμηθεί ακριβώς πώς και πότε θα γίνει ...

Απαντήθηκε 22/08/2008 στις 08:22
πηγή χρήστη

ψήφοι
7

Σύντομη απάντηση: Λόγω των χρονικών ζωνών.

Η Εποχή είναι σε UTC.

Για παράδειγμα, είμαι στο IST (Irish Standard Time) ή UTC + 1. time.mktime()είναι σε σχέση με τη ζώνη ώρας μου, τόσο στο σύστημά μου, αυτό αναφέρεται σε

>>> time.mktime((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000.0

Επειδή έχεις το αποτέλεσμα 1233378000, που θα δείχνουν ότι είστε πέντε ώρες πίσω μου

>>> (1233378000 - 1233360000) / (60*60)    
5

Ρίξτε μια ματιά στο time.gmtime()ρόλο που λειτουργεί μακριά UTC.

Απαντήθηκε 22/08/2008 στις 08:24
πηγή χρήστη

ψήφοι
2

απάντηση του Phil θα λυθεί πραγματικά, αλλά εγώ θα επεξεργαστεί λίγο περισσότερο. Επειδή η εποχή είναι σε UTC, αν θέλω να συγκρίνει άλλες φορές για την εποχή, θα πρέπει να τα ερμηνεύσει όπως UTC επίσης.

>>> calendar.timegm((2009, 1, 31, 0, 0, 0, 5, 31, -1))
1233360000
>>> 1233360000 / (60*60*24)
14275

Με τη μετατροπή του χρόνου πλειάδα σε μια χρονική σήμανση θεραπεία είναι η ώρα UTC, έχω έναν αριθμό που είναι ομοιόμορφα διαιρείται με τον αριθμό των δευτερολέπτων σε μια μέρα.

Μπορώ να χρησιμοποιήσω αυτό για να μετατρέψετε μια ημερομηνία σε ημέρες-από-την-εποχή αναπαράσταση η οποία είναι ό, τι είμαι τελικά μετά.

Απαντήθηκε 22/08/2008 στις 09:12
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more