Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

find Last mid-night time stamp in python

I want to find the last mid-night time stamp (only input is current timestamp). What is the best way?

I am writing python script for a global mobile application. The user request with the current timestamp, and in server side I want to find the last mid-night timestamp of the user with out affect time zone parameters.

I searched for it, I got a solution

import time
etime = int(time.time())
midnight = (etime - (etime % 86400)) + time.altzon

Its worked for me. But I am confused with time.altzon function, Is it create any problem for the users in different timezones.

like image 910
Jisson Avatar asked May 24 '26 01:05

Jisson


1 Answers

To get the midnight timestamp of the client(mobile) you need to know the client's timezone.

from datetime import datetime
import pytz # pip install pytz

fmt = '%Y-%m-%d %H:%M:%S %Z%z'
tz = pytz.timezone("America/New_York") # supply client's timezone here

# Get correct date for the midnight using given timezone.

# due to we are interested only in midnight we can:

# 1. ignore ambiguity when local time repeats itself during DST change e.g.,
# 2012-04-01 02:30:00 EST+1100 and
# 2012-04-01 02:30:00 EST+1000
# otherwise we should have started with UTC time

# 2. rely on .now(tz) to choose timezone correctly (dst/no dst)
now = datetime.now(tz)
print(now.strftime(fmt))

# Get midnight in the correct timezone (taking into account DST)
midnight = tz.localize(now.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None),
                       is_dst=None)
print(midnight.strftime(fmt))

# Convert to UTC (no need to call `tz.normalize()` due to UTC has no DST transitions)
dt = midnight.astimezone(pytz.utc)
print(dt.strftime(fmt))

# Get POSIX timestamp
print((dt - datetime(1970,1,1, tzinfo=pytz.utc)).total_seconds())

Output

2012-08-09 08:46:29 EDT-0400
2012-08-09 00:00:00 EDT-0400
2012-08-09 04:00:00 UTC+0000
1344484800.0

Note: on my machine @phihag's answer produces 1344470400.0 that is different from the above (my machine is not in New York).

like image 107
jfs Avatar answered May 25 '26 13:05

jfs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!