A Deep Dive Into Date And Time In Python

Поділитися
Вставка
  • Опубліковано 26 січ 2025

КОМЕНТАРІ • 108

  • @ArjanCodes
    @ArjanCodes  Рік тому

    👷 Join the FREE Code Diagnosis Workshop to help you review code more effectively using my 3-Factor Diagnosis Framework: www.arjancodes.com/diagnosis

  • @MutleyXIII
    @MutleyXIII 2 роки тому +15

    Thanks for the video, Arjan. By the way, I love this 'series' you going through the standard library. Though I am already aware of their features, there is always something to learn or to get used to. By the way, didn't know you normally record your videos a month before you launch them here :)
    Side note: I didn't found the link you mentioned at 7:30;

    • @ArjanCodes
      @ArjanCodes  2 роки тому +5

      Thanks Mauricio! It's not always a month before, but I do follow a pretty strict production schedule at the moment since there are more people involved now in the team.
      Sorry about the missing link - it's in the description of the video.

    • @munteanionut3993
      @munteanionut3993 2 роки тому

      More people? CoooL! You launching off Arjan! Actually you were already! Hard work pays off

  •  2 роки тому +3

    Quote from PostgreSQL docs on date/time:
    The first century starts at 0001-01-01 00:00:00 AD, although they did not know it at the time. This definition applies to all Gregorian calendar countries. There is no century number 0, you go from -1 century to 1 century. If you disagree with this, please write your complaint to: Pope, Cathedral Saint-Peter of Roma, Vatican.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 2 роки тому

      If they didn’t know it at the time, is there any record of it actually happening?

  • @havenisse2009
    @havenisse2009 2 роки тому +4

    This is interesting, and somewhat of a rabbit hole. I work in the industrial field (product coding). Dealing with dates there is always a challenge, since companies invent new date coding demands all the time. Commonly "Julian" dates are used, so something along "2391349" could mean "day 239 13:49". And there are special needs for encrypting days, dealing with offsets (around jan/feb/mar!), etc etc. Btw, you don't talk too much about the process of going from string->datetime, dealing with dates in random formats. This could be a topic for another video, assuming you have dates as string "23/10/22" or "20221023" or "23. oktober '22", and having to convert to a datetime. This is often asked in fora. Thank you for great content.

    • @Mr1995Musicman
      @Mr1995Musicman 2 роки тому

      Try the dateutil library. It tries to do this and actually does decently well. Way better than you could probably do fron scratch, but obviously not 100%. It's also probably not gonna handle super specialized datetime encodings either, but it's a really good starting point.

  • @iChrisBirch
    @iChrisBirch 2 роки тому +10

    I want to mention that python has an added standard library module `zoneinfo` since 3.9 that can eliminate external dependencies for timezone handling in a lot of cases.

    • @ArjanCodes
      @ArjanCodes  2 роки тому +1

      Good point, thanks for mentioning that!

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 2 роки тому

      Just make sure your zoneinfo is up to date. Changes happen several times a year.

    • @handle1138
      @handle1138 2 роки тому

      If you happen to not be running the > 3.9 version of python, when Running normal Cpython the time.localtime() function will also return the timezone information using the localtime() C library of the same name for the machine it is running on. This has been available for years without installing any additional packages to vanilla python. However you would have to DIY that information into your own Datetime aware object from the datetime module. You would also have to trust the computer has its own clock set correctly.

  • @saurabh2mishra
    @saurabh2mishra 2 роки тому +2

    Hey Arjan, thank you very much for your video. I'm following you from the very beginning. There are very few channels who are worth mentioning including yourself and @MathByte Academy. Kudos to you for making us a better programmer and learner every week. Keep doing great work !

  • @NateROCKS112
    @NateROCKS112 2 роки тому +2

    4:30 pretty sure UTC follows leap seconds, meaning that some days can have more seconds than others.

  • @hudabdulwahab2499
    @hudabdulwahab2499 2 роки тому

    Nice Arjan, now I know, when to take out my broetchen in NL time.
    But seriously, such a good tool. I didnt catch this feature here, but for those who want to use datetime in a for loop over a period between two dates with a specific interval e.g. every 2 days or every 13h37mins - looping through this using pendulum is a breeze!

  • @gargolito
    @gargolito 2 роки тому +8

    Hi Arjan, I've learned a lot from your videos. Was wondering if you have tried using "#%%" in vscode on your videos so you don't have to change to terminal to show code output? For those who may not know. Once you have the Python extension installed in VSCode, if you add "#%%" on top a code block, you'll be able to either click a button to run that code block, or all blocks below it. The output is shown in a new tab on the right by default. For example:
    #%%
    print("Hi Friend")

  • @solidaeon
    @solidaeon Рік тому

    Thanks for this very informative video, I am currently working on a date related project this was a huge life saver.

  • @thichuyen1597
    @thichuyen1597 2 роки тому

    Worked smoothly, tysm

  • @MessLeadingProgramming
    @MessLeadingProgramming 2 роки тому +41

    I have a recent fight with timezones. Not fun. You think all timezones are utc +- integer value? Wrong. Nepal has +45 minutes because of mountain alignment I believe. You think every country has one timezone? Wrong! You think every US state follows daylight saving consistently? Wrong! You think every city has one timezone? Wrong! There was an amazing article about misconceptions about timezones, need to find it and link here…

    • @Necrous13
      @Necrous13 2 роки тому

      Tom Scott did a great video on the issue on the computerphile channel ua-cam.com/video/-5wpm-gesOY/v-deo.html

    • @jambosuss
      @jambosuss 2 роки тому +7

      Tom scott also did a video on the nightmare which is timezones

    • @RoamingAdhocrat
      @RoamingAdhocrat 2 роки тому +1

      similar with the many, many assumptions one can make about people's names. "A person's name will be at least two characters long."

    • @jambosuss
      @jambosuss 2 роки тому

      @@RoamingAdhocrat Yeah, when 'O' is a common korean name

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 2 роки тому +2

      This is why we rely on the Olson zoneinfo database to manage all those headaches for us. Use standard library routines and let them worry about it.

  • @janHodle
    @janHodle 2 роки тому

    Really one of the best contents on UA-cam, in general. Your videos help me to become a better developer!

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 2 роки тому +1

    12:51 Yeah, but _starting_ daylight saving is the easy transition to handle; what about _ending_ daylight saving, when 3 a.m. occurs twice?

  • @franzweitkamp
    @franzweitkamp 2 роки тому +2

    There is also the freezgun package to help with datetime sensitive tests

  • @ArielVolovik
    @ArielVolovik 2 роки тому +2

    You mentioned an article in the description at 7:40 - I can't seem to find it

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Apologies - it's in the video description now.

  • @Phaust94
    @Phaust94 2 роки тому

    Great video! Thanks Arjan!

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Thank you, glad you liked the video!

  • @thomasjohanns7661
    @thomasjohanns7661 2 роки тому

    I thought: "what could I possibly learn about datetime in Python, but I'll watch the video anyway".... and I'm glad I did :) pendulum looks really nice and I only used it to generate timezones

  • @shashishekhar----
    @shashishekhar---- 2 роки тому

    Arjan is the big brother/ Mentor that we all needed not sure if we deserved tho.

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Thanks Shashi. Glad the content is helpful.

  • @unusedTV
    @unusedTV 2 роки тому +1

    7:15 where is the promised link to the article?

    • @ArjanCodes
      @ArjanCodes  2 роки тому +1

      Apologies - it's in the video description now.

  • @chris0628
    @chris0628 2 роки тому

    Awesome content, to the point with no fluff 👍🏽

  • @priyabratapanda1216
    @priyabratapanda1216 2 роки тому

    Thanks for this Videos! I was facing the timezone conversion problems earlier. This should have come bit earlier😂😂 which would have saved me a lot of time in past. Anyways its never too late. Please keep uploading more videos like this

  • @94Schuck
    @94Schuck 2 роки тому +5

    Is the Medium link he mentioned about the history of timezone database missing in the description?

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Apologies - it's in the video description now.

    • @94Schuck
      @94Schuck 2 роки тому

      @@ArjanCodes Thanks👏👏

  • @ramimashalfontenla1312
    @ramimashalfontenla1312 2 роки тому

    As always, really useful video!

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Thanks Rami, happy you’re enjoying the content! :)

  • @undergroundbodega9766
    @undergroundbodega9766 Рік тому

    Great vids!!

  • @JGnLAU8OAWF6
    @JGnLAU8OAWF6 2 роки тому +8

    Use built-in zoneinfo (Python 3.9+) instead of pytz.

  • @cybetica
    @cybetica 2 роки тому +1

    At first sight, I'm assuming pendulum's 'en' locale is short for 'English/England', based on the use of abbreviations of 'it' & 'nl' in your examples, but in fact the locale is 'American (English)', since we (English/British) also write the day before the month, and generally will use the 24hr clock. I hope they sort this out in later versions.

  • @miguelvasquez9849
    @miguelvasquez9849 2 роки тому

    Nice! If you prefer a native package, last version of python have its own timezone package.

    • @handle1138
      @handle1138 2 роки тому

      If you happen to not be running the latest version of python, when Running normal Cpython the time.localtime() function will also return the timezone information using the localtime() C library of the same name for the machine it is running on. This has been available for years without installing any additional packages to vanilla python. However you would have to DIY that information into your own Datetime aware object from the datetime module. You would also have to trust the computer has its own clock set correctly.

  • @StephenRayner
    @StephenRayner 2 роки тому

    Excellent video

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Thank you very much Stephen, happy you’re enjoying the content!

  • @VojtechMach
    @VojtechMach 2 роки тому

    Is the unix time actually stored in signed int instead of unsigned int? It doesnt make any sense, does it?

  • @astronemir
    @astronemir 2 роки тому

    I use astropy.Time for parsing or working with times.

  • @digiryde
    @digiryde 2 роки тому

    Yeah. I learned Zulu time in the military. I learned to use it for all coding to avoid all of the silly date/time issues you run into.
    Now, if we can just have a standard neutral data type for all types of data....

  • @RoamingAdhocrat
    @RoamingAdhocrat 2 роки тому

    Recording on Sept 16? Greetings from the future, Arjan! We have flying skateboards now!
    I think you can get VSCode to only lint when you save, which can cut down further on the red squigglies when you've paused to explain a point.

  • @Rebeljah
    @Rebeljah 2 роки тому

    thank you for the video!

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      You're Welcome and Thank you Rebijah, glad you liked the video!

  • @ChongFrisbee
    @ChongFrisbee 2 роки тому

    I agree that Datetime is better for the class. I use Databricks a lot and have bumped into bugs that should not exist in python where different parts of code expected different meanings for datetime (import datetime and from datetime import datetima were both present in the code)
    But my main reasoning is still for convention consistency. I have the same opinion for functools.Partial, for example. It was eye opening (usefull) finding out that is a class.

  • @leftblank5315
    @leftblank5315 2 роки тому +1

    3.9 has ZoneInfo now, however if you're on windows you need to provision the timezones database, which is tzdata on pypi. So pytz is pretty much here to stay for a while...

    • @JGnLAU8OAWF6
      @JGnLAU8OAWF6 2 роки тому

      Why does it need to stay? It's external dependency anyway, tzdata or pytz. And zoneinfo is arguably better than pytz.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 2 роки тому

      If you avoid deploying mission-critical systems on Windows, that reduces your embarrassment exposure.

    • @leftblank5315
      @leftblank5315 2 роки тому

      @@JGnLAU8OAWF6 it doesn't need to stay. What I'm saying is all packages have been using pytz for years. When you build your project you may as well keep using pytz because it's already installed. Secondly I don't recall fucking around with tzdata when I write on windows for pytz. It just works when you install it, unlike zoneinfo. At least that's my experience.

    • @leftblank5315
      @leftblank5315 2 роки тому

      @@lawrencedoliveiro9104 some people develop on windows and need seamless experience on multiple platforms. Magic is a prime example, you have to jump through hoops to get libmagic on windows.

    • @lawrencedoliveiro9104
      @lawrencedoliveiro9104 2 роки тому +1

      @@leftblank5315 Precisely. If you are after a “seamless” experience, then you have to avoid Windows.

  • @vee-obsidian
    @vee-obsidian 2 роки тому

    @arjancodes - love your channel. May we suggest topic for future video pls. "available options for a good async job scheduler in python on windows or cross platform similar to cron jobs on linux."
    thank you for all your hard work.

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 2 роки тому +1

    9:43 Still, it could be worse: it could be Java. I was doing some date/time conversions in an Android app some years ago, and it took me a while to realize that while every single method in a class might be deprecated, the class itself was still required elsewhere!

  • @AndreaDalseno
    @AndreaDalseno 2 роки тому

    Great video, as usual. What about a tutorial on VIM? You mentioned a plugin for VsCode in a previous video, but I can't find a specific video for VIM shortcuts.

    • @ArjanCodes
      @ArjanCodes  2 роки тому +1

      Great suggestion Andrea, thank you!

  • @pacersgo
    @pacersgo 2 роки тому +1

    Interestingly the pytz has the timezone of Asia/Chongqing but not Aisa/Beijing

  • @lawrencedoliveiro9104
    @lawrencedoliveiro9104 2 роки тому

    16:25 Actually days of the week should numbered from 0, aren’t they?

  • @Medan1993
    @Medan1993 2 роки тому +2

    datetime as a class is veery old thing, going back to Python 2.3 era where standarization wasn't as strictly enforced, hence we have this lowercase class.
    I guess it wasn't changed with python2 -> 3 transition due to sheer number of uses of it, so we are kinda stuck with it.

    • @spaghettiking653
      @spaghettiking653 2 роки тому +1

      I guess this is the same reason why methods in the unittest module are named in camelCase instead of snake_case like we're used to these days.

  • @ratulr
    @ratulr 2 роки тому

    ohmygod, thank you so much for this!

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      You're Welcome Ratul. Thanks so much, glad you liked it!

  • @JTYLER41
    @JTYLER41 2 роки тому

    Love the video.
    It is however Chronoton particles that are used for time travel. Tachyons are more cloaking devices!

  • @adityapal7764
    @adityapal7764 2 роки тому

    Am I the only one who noticed "adjusting for time traveling with Tacheon Particles" (The flash) reference?

  • @salec7592
    @salec7592 2 роки тому

    5:28 six PM, not six AM
    6:05 seconds, not milliseconds

  • @LionelLomberget
    @LionelLomberget 2 роки тому

    J'ai apprécié la prononciation en Français! Et le reste aussi

  • @mesaber86
    @mesaber86 2 роки тому

    Hahaha i like the grin you made after pronouncing that sbfkeldkgnkwkdll 😂 4:25

    • @ArjanCodes
      @ArjanCodes  2 роки тому +1

      Hahaha. Thank you, glad you liked the video!

    • @mesaber86
      @mesaber86 2 роки тому

      @@ArjanCodes always do... keep it up master Arjan.

  • @edip_c
    @edip_c 11 місяців тому

    🙇‍♂Took the "time" to hit the like! :)

    • @ArjanCodes
      @ArjanCodes  11 місяців тому

      Ahaha, thank you so much!

  • @samarbid13
    @samarbid13 2 роки тому +4

    Small tip:
    for these type of examples with one file, you can use the new Jupyter Notebook plugin for Vscode, it will be more convenient for you:
    #%%
    your code
    execute with ctr enter

  • @kayakMike1000
    @kayakMike1000 2 роки тому

    All dates everywhere must be ISO 8601!

  • @t67m
    @t67m 2 роки тому +2

    Sadly a UTC day is not always 24 hours (86400 seconds) long. Leap seconds exist in UTC resulting in occasional days which are 86401 seconds, or, theoretically, 86399 seconds long. It is a shame that datetime doesn't support TAI time 😒

    • @ArjanCodes
      @ArjanCodes  2 роки тому +3

      You could argue that a UTC day is actually always 24 hours, but one of the 24 hours is 1 second more or less in very rare circumstances :). But still, that's one more thing that makes dealing with dates and time a challenge.

  • @allo5668
    @allo5668 2 роки тому

    In a demo video like this, the red squiggles are really distracting. Consider disabling them when appropriate

  • @bocckoka
    @bocckoka 2 роки тому

    when did Arjan become so funny?

  • @italo.buitron
    @italo.buitron Рік тому

    Like if want to Uncle Bob tell the story about the california time guy.

  • @digiryde
    @digiryde 2 роки тому

    Pendulum links:
    pypi.org/project/pendulum/
    github.com/sdispater/pendulum
    pendulum.eustace.io/ Homepage
    Looks there is some development, but not much, probably just maintenance. The sdispater account, which owns the project, is active in the issues answering questions.

  • @Mr1995Musicman
    @Mr1995Musicman 2 роки тому +1

    Quick note: "import datetime as dt" is the classic way to handle the datetime.datetime probelm.
    Not making a value judgement one way or the other, but for newcomers to the language this is a common idiom you'll see.

  • @Mr1995Musicman
    @Mr1995Musicman 2 роки тому

    Small pronunciation tidbit: at around 5:00 you pronounced "alias" very strangely. Normally, it's pronounced AY-lee-us, whereas yours sounded more like uh-LIE-us.
    Edit: better timestamp and pronunciation

  • @0xDEAD_Inside
    @0xDEAD_Inside 2 роки тому +2

    I recommend dateutil package to everyone who is working with dates. Makes life easy!

    • @ArjanCodes
      @ArjanCodes  2 роки тому

      Thanks for the suggestion - I'll take a look!

  • @TomTrval
    @TomTrval 2 роки тому +1

    Personally I prefer an arrow python package :) I really like the arrow.get method :D

  • @gshan994
    @gshan994 2 роки тому

    I jus do
    datetime.now()
    I get int timestamp.
    Use it for hash key in Dynamodb for events. 😂

  • @3sawy20
    @3sawy20 2 роки тому

    pytz.exceptions.UnknownTimeZoneError: 'America/New York '