Re: How do you remember the number of days in each month?
by salva (Canon) on Sep 16, 2014 at 15:13 UTC
|
| [reply] |
Re: How do you remember the number of days in each month?
by LanX (Saint) on Sep 16, 2014 at 11:29 UTC
|
I think every kid in Germany learns the knuckle calendar, I suppose it's pretty widespread in continental Europe or even Eurasia.
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
| [reply] |
|
| [reply] [d/l] |
Re: How do you remember the number of days in each month?
by blue_cowdawg (Monsignor) on Sep 16, 2014 at 13:29 UTC
|
Unix "cal" command is your friend.
Peter L. Berghold -- Unix Professional
Peter -at- Berghold -dot- Net;
Blog: http://blog.berghold.net Warning: No political correctness allowed.
| [reply] |
Re: How do you remember the number of days in each month? (Hrundi V. Bakshi)
by Discipulus (Canon) on Sep 16, 2014 at 10:36 UTC
|
Italian version:
trenta dì conta Novembre con April, Giugno e Settembre
di ventotto c'è n'è uno, tutti gli altri ne han trentuno.
L*
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
| [reply] [d/l] |
Re: How do you remember the number of days in each month?
by erix (Prior) on Sep 16, 2014 at 15:26 UTC
|
select
to_char(
generate_series(
date( cast( to_char(current_date, 'YYYY' ) as integer) ||
+'-02-01' )
, date( cast( to_char(current_date, 'YYYY' ) as integer) + 1 ||
+'-01-01' )
, interval '1 month'
) - interval '1 day', 'DD')
;
to_char
---------
31
28
31
30
31
30
31
31
30
31
30
31
(12 rows)
Or, golfed down a bit...
select to_char(generate_series('20140201','20150101',interval'1mon')-i
+nterval'1','DD');
...it's shorter than the italian nursery rhyme! ;-)
update 1, yeah, I'm updating & golfing it a bit, sorry :)
update 2, (aargh! Oracle wins the Golf contest by 2 characters...
update 3, (aha! Oracle wins the Golf contest by only 1 character, (pg accepts '1mon' for '1 mon')
update 4, (aha!)
select to_char(generate_series('140201','150101',interval'1mon')-inter
+val'1','DD'); -- Pg (9.5dev)
SELECT TO_CHAR(ADD_MONTHS(DATE'14-1-1',LEVEL)-1,'DD')FROM Dual CONNECT
+ BY LEVEL<13; -- Oracle (10g)
SELECT TO_CHAR(TO_DATE(LEVEL,'MM')-1,'DD')FROM Dual CONNECT BY LEVEL<1
+3;
select to_char(to_date(generate_series(2,13)::text,'MM')+interval'1y -
+1s','DD'); -- Pg. awful but works :)
SELECT TO_CHAR(LAST_DAY(TO_DATE(LEVEL,'MM')),'DD')FROM Dual CONNECT BY
+ LEVEL<13; -- Oracle. "saved 3 char'
SELECT TO_CHAR(TO_DATE(LEVEL,'MM')-1,'DD')FROM Dual CONNECT BY LEVEL<1
+3; -- Oracle. "start from december" (shortest)
select 30+(3+(3*m+3)%5-(3*m+1)%5)/5from generate_series(3,13)f(m); --
+ wrog's (short but incomplete: march through january)
Looks like Oracle wins this little golfing contest. Ah well... it has to have something to justify the price ;-))
Well played chacham++ :-)
| [reply] [d/l] [select] |
|
SQL> SELECT
2 LEVEL Month,
3 TO_CHAR(LAST_DAY(TO_DATE(LEVEL || '/1/' ||
4 TO_CHAR(SYSDATE, 'YYYY'), 'MM/DD/YYYY')),'DD') Days
5 FROM
6 Dual
7 CONNECT BY
8 LEVEL <= 12;
MONTH DA
---------- --
1 31
2 28
3 31
4 30
5 31
6 30
7 31
8 31
9 30
10 31
11 30
12 31
12 rows selected.
After the update in the parent, i realized this too could be shortened:
SELECT
TO_CHAR(ADD_MONTHS(TO_DATE('1', 'DDD'), LEVEL) - 1, 'DD')
FROM
Dual
CONNECT BY
LEVEL < 13;
But, if we can cheat and specify the year, using the ANSI date literal is slightly shorter:
SELECT
TO_CHAR(ADD_MONTHS(DATE '2014-1-1', LEVEL) - 1, 'DD')
FROM
Dual
CONNECT BY
LEVEL < 13;
In a race with the parent to find the shortest SQL. :) So far we went with a literal data (which locks it to 2014), but he outdid me by removing the '20' from the date. Touché!
Though, not to be outdone, we'll find something shorter (as of update 4) and even go back to working for every year:
SELECT TO_CHAR(LAST_DAY(TO_DATE(LEVEL,'MM')),'DD')FROM Dual CONNECT BY
+ LEVEL<13;
Saved 3 characters. :)
If we can start from December, we'll save 8 more characters (for a total of 11):
SELECT TO_CHAR(TO_DATE(LEVEL,'MM')-1,'DD')FROM Dual CONNECT BY LEVEL<13;
| [reply] [d/l] [select] |
Re: How do you remember the number of days in each month?
by wrog (Friar) on Sep 18, 2014 at 00:36 UTC
|
30+(3+ (3*$_+3)%5 - (3*$_+1)%5)/5
works for March (3) through January (13).
Or to put it another way, you add 1 to the month and then multiply by 3 and if subtracting 2 from that crosses through a mod-5 boundary then you have a 30 day month, otherwise you have a 31 day month
So May (6*3=18 —→ 16) has 31, while June (21 —→ 19) has 30.
Yeah, that's how I remember this.
| [reply] [d/l] |
|
DB<105> print 30+($_+($_>7))%2 for 1..12
31
30
31
30
31
30
31
31
30
31
30
31
DB<106> print 30+($_+($_>7))%2-2*($_==2) for 1..12
31
28
31
30
31
30
31
31
30
31
30
31
DB<113> print ((30,31,28)[($_+($_>7))%2-($_==2)]) for 1..12
31
28
31
30
31
30
31
31
30
31
30
31
30
31
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
| [reply] [d/l] |
|
| [reply] |
Re: How do you remember the number of days in each month?
by SuicideJunkie (Vicar) on Sep 16, 2014 at 14:32 UTC
|
I don't bother trying to remember or calculate. Months are quite meaningless anyways.
What *is* important is how many days are left until the weekend!
| [reply] |
|
Unless you get paid on the first day of each month - then it matters.
| [reply] |
|
If you don't spend it all, then the exact time of more money coming in won't matter. Just check in every now and then to dump the excess into RRSPs and stuff.
| [reply] |
Re: How do you remember the number of days in each month?
by barrd (Canon) on Sep 17, 2014 at 06:58 UTC
|
Mnemonic devices save me :) So it's 30 days hath September...
Same for (UK?) lines of the treble clef, was taught this in primary school;
Every Good Boy Deserves Females
| [reply] |
|
| [reply] |
|
| [reply] |
|
|
|
|
Heh - I went to Primary school in Scotland during the 70's, before the days of crazy political correctness, teachers could still have some fun. ;)
| [reply] |
|
| [reply] |
Re: How do you remember the number of days in each month?
by chacham (Prior) on Sep 16, 2014 at 13:46 UTC
|
Someone punches me on the first of the month.
And how exactly does that help you remember how many days are in the month?
| [reply] |
|
| [reply] |
Re: How do you remember the number of days in each month?
by ambrus (Abbot) on Sep 23, 2014 at 10:51 UTC
|
I remember if I must from knowing that the month of my birthday and the month following it both have 31 days, but usually I try to leave such error-prone computations to computers instead. If you are using perl, I generally recommend the Date::Manip module, unless you need sub-second precision.
| [reply] |
Re: How do you remember the number of days in each month?
by Bloodnok (Vicar) on Sep 22, 2014 at 14:18 UTC
|
| [reply] |
Re: How do you remember the number of days in each month?
by chacham (Prior) on Sep 16, 2014 at 13:40 UTC
|
It's kinda neat and allotta fun to write small scripts in whatever language you're currently using. Not that they are always useful though. :)
| [reply] |