7

I'm using tzlocal.get_localzone() to get the local time zone. However, on AWS Lambda this returns "local" instead of the actual TZ such as "Americas/New_York" I'm then trying to use the return value with datetime.replace(tzinfo=new_time_zone) however, this fails when passed in as "local"

Does anyone have a trick on how to do this in AWS so my lambda ftn uses the TZ relative to the region its running in, or do I need to escalate this with AWS?

Quadgnim
  • 531
  • 1
  • 6
  • 11

2 Answers2

4

You should not use tzlocal in server-side code. It is meant for desktop applications only.

  • Most servers, especially in cloud-based services, set their system time zone to UTC.

  • You have no guarantee that the server's time zone is set to anything in particular (including UTC, or a regional time zone).

  • Your code should not behave differently when running from one cloud environment to the next, or on premises.

This is also described in the timezone best practices article.

Community
  • 1
  • 1
Matt Johnson-Pint
  • 230,703
  • 74
  • 448
  • 575
0

You can use the following code to get the server's timezone name. Meaning, if the server is located in Denver, Colorado, TIME_ZONE will be set to "America/Denver".

import tzlocal
TIME_ZONE = tzlocal.get_localzone().zone
MikeyE
  • 1,756
  • 1
  • 18
  • 37