![]() |
||
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 引用:
寫不出來沒關係... 學會看API的doc就行了... 練一練就會寫了.. 如果連API的doc都看不懂, 那就真的是入錯行了... 沒天分, 沒資質... 學會看API的doc比會寫還重要.. 很多就是看到API文件是英文開頭就馬上放棄... 學校教育教的一個課題應該也包括如何看懂API文件.. 只是很多應該都是略過不講... ![]() 此文章於 2015-05-23 09:00 PM 被 vxr 編輯. |
||||||||
![]() |
![]() |
Regular Member
![]() ![]() 加入日期: Jul 2014
文章: 89
|
一年有365天
一年有約52周=52*7+1 所以正常情況下,每年當月當日的星期x就會自動shift一天 如果偷懶一點,弄個長度為12的陣列,隨便抓各一年把當年每月第二個星期二擺進去 這樣就可以瞬間抓出你要的答案了 假如以2017當基準(2016是閏年) 2017年二月的第二個星期二是7號-->隔年就會變6號-->再隔年5-->再隔年4->再隔年9(剛過閏年多減1--因為2-2=0,所以2會落到第一周,要加7才對) 用這個演算法,應該很容易寫成程式吧? |
||
![]() |
![]() |
Silent Member
加入日期: May 2015
文章: 1
|
星期是循環的,所以第二個週二一定在第8∼14天之間,只有7種可能,判斷一下就好,不用迴圈...
如果知道 xx月 1日 是星期w w>2 : 第二個星期二是 xx月 17-w 日 w<=2 : 第二個星期二是 xx月 10-w 日 此文章於 2015-05-23 09:23 PM 被 AntoineHu 編輯. |
![]() |
![]() |
*停權中*
加入日期: May 2014 您的住址: 某個不大不小的島
文章: 628
|
引用:
那,把 http://developer.android.com/reference/packages.html 看完就???? |
|
![]() |
![]() |
Elite Member
加入日期: May 2002 您的住址: 地球的上面..
文章: 5,854
|
![]() 引用:
你覺得你很神.. 你就把他看完吧... ![]() 我個人不想做這種殺死腦細胞... ![]() |
|
![]() |
![]() |
Master Member
![]() ![]() ![]() ![]() 加入日期: Apr 2001 您的住址: 高雄
文章: 2,247
|
我的第一感也是找到第一個星期二,然後給它+7天……
路有很多種啦,知道剛好可以應用的函數很好,不知道也無所謂,只要邏輯正確都可以推出來的。 年輕時和教課的講師說的一樣,會沈迷於盡可能寫出精簡的程式,最好一行結束,又帥又神氣。 其實這都不是必要的,寫出簡明易懂的程式比較方便後人維護、依情況改變時方便修改才是正途。等到程式龐大到某個程度再來考慮精簡的問題吧。
__________________
簽名檔真是礙眼…還是讓版面乾淨點吧! |
![]() |
![]() |
Major Member
![]() 加入日期: Nov 2004 您的住址: 高雄
文章: 276
|
PHP
代碼:
<?php $year = '2015'; $month = '04'; $dt = new DateTime("{$year}-{$month}"); $dt->modify('second tuesday'); echo "{$year}年{$month}月的第二個禮拜二是",$dt->format('Y-m-d'); ?> 會不會寫不重要 我覺得重要的是有基本sense跟找尋資源的能力
__________________
![]() It's when you start to become really afraid of death, that you learn to appreciate life. [Leon] 此文章於 2015-05-24 10:25 AM 被 嚐起來像雞 編輯. |
![]() |
![]() |
New Member
加入日期: Jan 2008
文章: 2
|
如果可以運用模組的話
這程式邏輯不是很難 使用 PERL 代碼:
use DateTime; my $yyyy = 2015; my $mm = 05; my $date = DateTime->new(year => $yyyy, month => $mm); $date->subtract(days => ($date->day_of_week - 2) % 7 - 7 * 2); print "$yyyy年$mm月的第二個禮拜二是$date\n"; 代碼:
use Date::Manip::Base; my $dmb = new Date::Manip::Base; my $yyyy = 2015; my $mm = 5; my $ymd = $dmb->nth_day_of_week( $yyyy, 2, 2, $mm); printf "$yyyy年$mm月的第二個禮拜二是%s\n", join '-', @$ymd; 代碼:
use Date::Manip::Date; my $date = new Date::Manip::Date; $date->parse('Second Tuesday in Jul 2015'); print $date->printf('%Y-%m-%d'); # prints 2015-07-14 |
![]() |
![]() |
Advance Member
![]() ![]() 加入日期: Feb 2003
文章: 406
|
重點是萬年曆的運算, 英文版Wiki有說如何運算
http://en.wikipedia.org/wiki/Julian_day#Calculation 以下C99 code是小弟網路上找的, 利用以上演算, 不仰賴外部library. code只有3行, 若要壓到1行也是可以的, 但compiler會抱怨, 且最後轉出的assembler不會比較優. 代碼:
#include <stdio.h> const char *wd(int year, int month, int day) { static const char *weekdayname[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"}; size_t JND = \ day \ + ((153 * (month + 12 * ((14 - month) / 12) - 3) + 2) / 5) \ + (365 * (year + 4800 - ((14 - month) / 12))) \ + ((year + 4800 - ((14 - month) / 12)) / 4) \ - ((year + 4800 - ((14 - month) / 12)) / 100) \ + ((year + 4800 - ((14 - month) / 12)) / 400) \ - 32045; return weekdayname[JND % 7]; } 找出第一個週二再稍微寫一些code即可 此文章於 2015-05-24 01:42 PM 被 anomaly 編輯. |
![]() |
![]() |
Junior Member
![]() ![]() ![]() 加入日期: Feb 2013
文章: 761
|
|
![]() |
![]() |