- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
205 lines
18 KiB
Plaintext
205 lines
18 KiB
Plaintext
Episode: 1182
|
|
Title: HPR1182: LiTS 023: Date
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr1182/hpr1182.mp3
|
|
Transcribed: 2025-10-17 21:08:31
|
|
|
|
---
|
|
|
|
Welcome to Linux in the Shell, episode 23, the date command.
|
|
My name is Dan Washco, I'll be your host today, and before starting, I'd like to thank
|
|
Hacker Public Radio for not only hosting the website, but also the audio files.
|
|
If you have not already contributed or listened to Hacker Public Radio, I strongly suggest
|
|
to do so, it's a fantastic community.
|
|
So head on over to HackerPublicRadio.org to find out what you can do and the wonderful
|
|
shows that are already available for your listening, pleasure, and education.
|
|
Today we're going to talk about the date command, which is a extremely versatile tool, particularly
|
|
for getting timestamps and displaying date and other types of information.
|
|
I use it all the time in scripts to not only, like I say, set a timestamp, but to do
|
|
some comparisons and stuff like that in there, it's extremely useful.
|
|
Now the date command makes use of the LC underscore time value of your locale.
|
|
Now the locale is set when you install a system, when it asks you for your time zone and
|
|
your keyboard, your language defaults, and stuff like that.
|
|
That is generally what sets up your locale.
|
|
So LC time or what date uses for the time formatting is part of locale.
|
|
Locale basically sets your language and cultural formatting for things like date, time, currency
|
|
and all that.
|
|
Now, how you adjust locale and where those settings are stored, a little beyond the scope
|
|
of this episode, but in a nutshell, again, on ArchSystem, it's in the Etsy.locale.com file.
|
|
On a Red Hat based system, that information is stored in Etsy, SlashSysConfig, Slash
|
|
I18, and on a Debian based system, it's an Etsy default slash locale.
|
|
Look at your documentation for your distribution if you really want to know how to set your locale
|
|
or reset it or temporarily set your locale for whatever purposes that you would want to.
|
|
But anyway, the date command uses the LC underscore time values of your locale.
|
|
Just issuing the date command by itself.
|
|
Now, I'm going to preface by saying a lot of the examples on the website, maybe some
|
|
of the things I'll express here in the video, the LC time value is EN underscore us.utf-8.
|
|
So it's an, I'm coming from a US English perspective here and my time zone is America Slash
|
|
New York. So it's Eastern time zone with the elite savings time. So be aware of that.
|
|
Your mileage may vary if you're in a different time zone, different part of the world.
|
|
So be aware of that different country. Okay, anyway, issuing the date command by itself is
|
|
just going to display the current date and time of your system. The value is going to come out
|
|
looking like something like Saturday, February 9th, 1148, 51, time zone being Eastern and a year
|
|
2013. So that's kind of the default format on my system when I issue the date command.
|
|
Now, let's say that you want to find a different time instead of the current time.
|
|
And then you might say, well, if I already know the time that I'm looking for, why would I want
|
|
to find it? Well, let's come at it from a different perspective. The dash D option or dash
|
|
date equals takes a date as a as a string format and returns the value. And you say, well, okay,
|
|
but what would I put in there? Well, you don't necessarily just put in like, you don't put in
|
|
April 14th, 2013. And it doesn't just spit back April 14th, 2013. And all actuality,
|
|
it would, but it would add some other information on there, like probably the hour, which would be
|
|
set to midnight, 0, 0, 0, 0, 0, minute, 0, 0 seconds, whatever. But anyway, what you would want to do
|
|
a lot of times with the dash D option is to say like date dash D five days. And that will tell you
|
|
the date five days from now, that full format, it would set the option to be, you know, just like the
|
|
the format that we talked about right now before. And the actual syntax would have been date five days.
|
|
So it would look at the current date of the system and just advance it five days and give you that
|
|
information. You can do date two days ago. And it would show you those the date two days ago.
|
|
Again, you might be saying, okay, that starts to make some sense there. I can get some pretty good
|
|
information if I had that in the script. So you can do a bunch of different options in there,
|
|
passing there. You can do like days, months, years, hours, minutes, seconds. You can put a go in there.
|
|
It'll show you the past. So if you did like date dash D five minutes, it would show you five minutes
|
|
in the future or five months. It would show you five months into the future with the date would be
|
|
five months in the future. Now that's going to come in real handy when we start talking in a few
|
|
minutes about different ways to format the date because you can pull some really great information
|
|
out of there. Like you can get the day of the week of the date five days from now or five months
|
|
from now, this day of the month, five days from now, what day of the week it's going to be.
|
|
Or you can look back and say, this day in 2005, seven years ago, no, it'd be eight years ago now,
|
|
sorry, print out the day of the week it was. So we'll get to that in just a minute. But before,
|
|
before we continue on, the dash F or dash dash file equals option, what that does is it allows
|
|
you to do the same thing as dash D, but it takes as input a file that in each line has
|
|
those parameters in it. So for instance, if you had a file that's called date file and the first
|
|
line was, you know, five days ago, second line was one month and the third line was two hours,
|
|
10 minutes, and the fourth option was like Monday. It would pass to the date command those values.
|
|
So it would show you the date value three, you know, five days in the past, one month in the
|
|
future, two hours, 10 minutes in the future, it would show you the date of the next following Sunday
|
|
coming up or Monday, what I said right there. So you can do like those parameters that you would
|
|
pass with the dash D, you can pass those, you know, put those into a file as many as you want and
|
|
pass the dash F command and that file name and it would spit out the values for each line. So
|
|
that could be pretty handy. So that there's a pretty neat options right there. Let's talk about
|
|
formatting the output of the date command. Now I could get really, really dry and boring here.
|
|
Maybe if some of you haven't about this might be a little boring already, but how could it be?
|
|
This is exciting stuff Linux in the shell. There are a ton of different ways to display different
|
|
values of the dates, but the format is the same. It execute the date command and if you want to get
|
|
just specific values of the date or time, it's the plus sign followed by a percentage and a variable.
|
|
And the variables are all like single letter variables, both upper and lower case, and there's a ton of them.
|
|
But for instance, if you wanted to get to show just this the full year, the full four year
|
|
string, that's four characters of the year string, that would be date plus percent capital Y.
|
|
If you wanted to just look at the name of the day of the full day of the week,
|
|
that would be date plus percent capital A. So there's a whole bunch of those different things in
|
|
there. And as you can see, you can start stringing those values together because the formatting
|
|
in this is that it accepts other characters in there, but it translates the percentage and the
|
|
variable into what that value for the date command is. So like if you did date plus percent capital Y,
|
|
dash percent M, let's lower case M, dash percent D, that's going to give you the full date format
|
|
of percent capital Y is equal to 2013, this is the year, puts a dash in there, then it gives you
|
|
the month, then puts a dash in there and gives you the year. So if you wanted to actually print out
|
|
a string, like today is the day of the week, day name of the week, it would be plus, you would
|
|
put in double quotes, double quotes plus, well you wouldn't put plus, double quotes, today is
|
|
plus percent capital A, space of the week, and the double quotes, and that would print out whatever
|
|
it is, like for instance, right now, recording this, today is Saturday of the week, that doesn't
|
|
make sense, but you get the idea right there. So you can format now, let's go back a second there
|
|
to when I was talking about the dash D command, okay, when I said the dash D, like I said, well,
|
|
let's say that you wanted to find the day, this like today, today is Saturday, February,
|
|
10th, 2013, what was the day of the week, a year ago, what was the day of the week? Well,
|
|
if you would put in, if you would type in for the day command, date, and then dash D one year ago,
|
|
that's going to give you this day a year ago, February 9th, a year ago, and that would be
|
|
putting it in February 9th, a year ago, that would be Thursday, the week, but I could just get
|
|
the day of the week by putting percent A, so I would do date, dash D in double quotes one year ago,
|
|
close the double quotes and do plus percent A, and all I'm getting back is Thursday, the full
|
|
string, so you can get some really cool stuff. Now, there are some values that aren't necessarily
|
|
displayed in the default output of the date command, or they're displayed in different ways,
|
|
you can get, and so you can have alter those values to come back when you do a dash D option.
|
|
It's really handy, so you can look ahead into the future and say, what's it going to be,
|
|
what's today's date going to be a year from now? Well, it's not going to be Saturday, a year
|
|
from now, the date is going to be a year from now, Sunday, so it's just going to be one day
|
|
ahead, really cool stuff, really fun, great stuff with the date command. If you want to know all
|
|
those different variables, like percent capital C is going to give you the century that we're in,
|
|
head on over to the website, look it up, or just go to mandate, that's going to tell you all
|
|
that information. Now, there are some other options to date that you probably have other formatting
|
|
options. By default, the date command pads empty spaces with zero, so if you had a single digit
|
|
month day hour, it would pre-pend to zero to that, like 1 p.m. would be 0 1 p.m. by default.
|
|
You can change those values, or how that that behavior, with a few formatting options,
|
|
flags that go in between percent, sign, and the variable, like what we're talking about,
|
|
we'll start with just talking about minute. Now, minute is, minute of the day is percent capital
|
|
M, and it has a leading zero. If you put a percent hyphen capital M, then that removes the padded zero,
|
|
so it gets rid of the zero, it does not do any padding. If instead of a hyphen, you put an
|
|
underscore in there, it's a big percent underscore capital M. It changes the zero paddings with spaces,
|
|
so what was before zero nine now becomes space nine. If you put a zero in between value percent zero
|
|
capital M, you get padded with zero, which is the default we're talking about. Now, there's another
|
|
two options here. One is the carrot, which is typically that symbol above six, which you do is plus
|
|
percent carrot, and let's choose a different one. Percent P shows AM or PMs capitalized. Percent capital
|
|
P shows AM or PM, but lowercase. Well, if you did plus percent carrot capital P, that's equivalent
|
|
to doing plus percent P, because the carrot says use uppercase if possible, so it would change the
|
|
lowercase AM and the percent capital P to uppercase. There was the same thing with the hash or the
|
|
pound sign. That uses lowercase if possible, so that would change percent lowercase P, which is
|
|
capital AM or PM. If you did percent pound lowercase P, it would change it from capital to lowercase.
|
|
There's a couple of things there. Now, there's there's an option also to append a number. If you
|
|
append a number between a percent and the variable that you're using, it's will specify the width of
|
|
the field. In my playing around with this and experience, the appending, like if you did a plus
|
|
percent 8Y capital Y, that's going to append eight fields in front of the four digit year.
|
|
Okay, so you're going to get by default eight zeros in front of the year. Now, if you were to do plus
|
|
percent 2Y, it does not limit it to only the two characters. It doesn't truncate values. I've
|
|
not found that the truncate values. It will only pad if the value is greater than the fields being
|
|
returned, the number of fields being returned. Just be aware of that. There are some other options
|
|
that are only really supported by specific locales. One is a debt as capital E. So if you were to put
|
|
a percent capital E and any one of these following variables, lower uppercase C, lower uppercase X,
|
|
lower uppercase Y, it will use an alternative representation for the values. Now, the main
|
|
file gives an example of using it in like Japanese locale where it would show you and using with the
|
|
year, it would show you the year from the emperor's reign, something like that. I don't have any
|
|
alternate values that I can see on my locale. Similarly, with putting zero, which can only be applied
|
|
to numeric conversions, if you do a percent zero and the value, it'll use in a locale's alternative
|
|
if numeric system if you have one. I have not had anything like that for me, so just to be aware of
|
|
that. All right, so we've covered a lot of basic uses of what you would use the date command,
|
|
how you can format variables. There are a few other flags there that you can use for specifically
|
|
displaying the output of the date command and specific ISOs or RFC formats. One is the dash
|
|
capital R or dash dash RFC dash 2822 and that will output the format in the RFC dash 2822 format,
|
|
which by default, my system gives returns a Saturday comma zero nine fed uses fed the abbreviation
|
|
of the month. Then it gives the year 2013 and the time hour, minute, second and then also displays
|
|
the time numeric time zone value, which is negative zero five zero zero. There are two other options,
|
|
dash capital I or dash dash ISO dash 8601. That one by default just displays the date in the format
|
|
of four to two year dash month dash day. Then there's also RFC dash 3339 or dash dash RFC dash 3339.
|
|
Now be aware that that one requires a time spec to be passed to it. Now both the dash I and dash
|
|
RFC dash 3339. Dash I will accept the time spec, but it's not required. RFC dash 3339 requires
|
|
a time spec and what the what a time spec is is it differs between the two because they accept
|
|
different time specs, but it can be one of these for both ISO 80601 and RFC 3339 except date
|
|
has time spec just a word date and it returns that date like it both return the year dash month
|
|
dash day. Then ISO 8601 accepts hours and minutes and what those two those do is that will print for
|
|
hours. It will print the date and then T for time, capital T and then the hour and then the
|
|
time zone offset and if you do minutes it will do the year capital T hour colon minutes and then
|
|
the time zone offset. Now both RFC dash 3339 and ISO 8601 except seconds and that does the formatting
|
|
of the year will the date the year month day T hour, minute, second and time zone offset. Now
|
|
the difference between the two is ISO 80601 shows time zone offset as being like 0 5 0 0 whereas RFC
|
|
dash 3339 shows the offset as as a you know minus 0 5 colon 0 0. And then the final option to both
|
|
of those is NS for nanoseconds which shows you that the exact same string I was talking about
|
|
before but after seconds it has a comma and puts the nanoseconds value in there. That's typically
|
|
a rather large string right there and shows you the nanoseconds that it's at. There is a way to
|
|
display universal or UTC time and that's a date dash U or dash dash UTC or dash dash universal that
|
|
will output the the current time and UTC that can be very handy and that covers it for displaying
|
|
the dates. The date command also allows you to set your systems date or time with the dash S option
|
|
and if you do date dash S and you specify a time like for instance dash date S in double quotes like
|
|
2013 dash 0 1 dash 15 and then 0 8 colon 15 colon 44 that's going to set the current system date
|
|
to the year 2013 to the month of January to the day of January 15. That would become the date
|
|
then the time is going to be 8 15 am 44 seconds. Now you have to have elevated or root privileges
|
|
to be able to adjust your systems date and time. And if you're using something like NTP
|
|
and network time protocol you probably don't want to be messing around with your date but you can
|
|
you can't adjust your date. If you leave off any values they just get set to 0. So if you just
|
|
specify the date it would set the time to 0 0 0 0 0 as if it was midnight stroke of midnight.
|
|
The final switch that I want to make reference to is called the reference switch. That is dash R or
|
|
dash dash reference equals and some file name and what that'll do is it will allow you to display
|
|
the last modification time of a file and then you can use the formatting variables to display that
|
|
value any format that you want to. So that's again that's the dash R or dash dash reference equals
|
|
file and displays the last modification time of that file. That's the date command in a nutshell
|
|
describing it. It's very powerful to wonderful to have. I strongly recommend you get a little
|
|
comfortable with it because it'll help you with scripts and doing backups and all sorts of
|
|
nasty things always using the date command. Head on over to the website linux and the shell.org
|
|
check out the right up on it to get more information on using the date command and the watch the
|
|
video on some of the examples. My name has been Dan Washco. I thank you for listening to Linux
|
|
and the shell. I strongly encourage you to support Hacker Public Radio that supports this show
|
|
and you have a great day. You have been listening to Hacker Public Radio at Hacker Public Radio.
|
|
We are a community podcast network that releases shows every weekday Monday through Friday.
|
|
Today's show, like all our shows, was contributed by a HPR listener like yourself.
|
|
If you ever consider recording a podcast then visit our website to find out how easy it really is.
|
|
Hacker Public Radio was founded by the Digital Dark Pound and the Infonomicom Computer Club.
|
|
HPR is funded by the Binary Revolution at binrev.com. All binrev projects are crowd-responsive
|
|
by lunar pages. From shared hosting to custom private clouds, go to lunarpages.com for all your
|
|
hosting needs. Unless otherwise stasis, today's show is released under a creative comments,
|
|
attribution, share a life, lead us all license.
|