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…
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.
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.
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")
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;
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.
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.
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.
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 !
4:30 pretty sure UTC follows leap seconds, meaning that some days can have more seconds than others.
2 года назад
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.
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!
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.
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
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
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.
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 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.
@@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.
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.
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....
@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.
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.
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.
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.
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
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 😒
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.
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!
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.
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
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.