ABAP: 今天是星期幾?

看到這個問題, 第一反應是: 能不能找到相關的function module. ABAP的function module實在太方便, 有時候, 這樣的方便反而妨礙我們思考...

其實有一個很簡單的方法可以算出今天是星期幾, 且看下面的代碼:

DATA: lv_date TYPE sy-datum,
      lv_date2 TYPE sy-datum value '19700101',
      lv_days TYPE i.

DATA: lv_week TYPE i.

lv_date = sy-datum.

lv_days = lv_date - lv_date2 + 4.

lv_week = lv_days MOD 7.

WRITE: lv_week.

ABAP的時間類型轉換爲i類型會變成天數, 兩個日期相減能得到之間相差的天數, 1970年1月1日是星期四, 所以我的公式加上了4, 最後對日數取餘.

餘數0: 星期天

餘數1: 星期一

       ......


P.S. 謝謝Palm童鞋, 教我太多了


P.S. 相關的歷史(摘自百度知道)


1970年1月1日

1969年8月,貝爾實驗室的程序員肯湯普遜利用妻兒離開一個月的機會,開始着手創造一個全新的革命性的操作系統,他使用B編譯語言在老舊的PDP-7機器上開發出了Unix的一個版本。隨後,湯普遜和同事丹尼斯里奇改進了B語言,開發出了C語言,重寫了UNIX,新版於1971年發佈。

那時的計算機操作系統是32位,時間用32位有符號數表示,則可表示 68 年,
用32位無符號數表示,可表示136年。他們認爲 以 1970年 爲時間 原點 足夠可以了。 因此,C 的 time 函數 就這麼 定了,後來的 java 等也用它,微機也用它,工作站本來就是unix系統當然也用它。(今後若用64位機年限更沒問題。)

1970年1月1日 算 UNIX 和 C語言 生日。

由於主流計算機和操作系統都用它,其他儀器,手機等也就用它了。

閏年
閏年(Leap Year)是爲了彌補因人爲曆法規定造成的年度天數與地球實際公轉週期的時間差而設立的。
地球繞日運行週期爲365天5小時48分46秒(合365.24219天),即一回歸年(tropical year)。公曆的平年只有365日,比迴歸年短約0.2422 日,每四年累積約一天,把這一天加於2月末(即2月29日),使當年時間長度變爲366日,這一年就爲閏年。 需要注意的是,現在的公曆是根據羅馬人的"儒略曆"改編而得。由於當時沒有了解到每年要多算出0.0078天的問題,從公元前46年,到16世紀,一共累計多出了10天。爲此,當時的教皇格雷果裏十三世,將1582年10月5日人爲規定爲10月15日。並開始了新閏年規定。即規定公曆年份是整百數的,必須是400的倍數纔是閏年,不是400的倍數的就是平年。比如,1700年、1800年和1900年爲平年,2000年爲閏年。此後,平均每年長度爲365.2425天,約4年出現1天的偏差。按照每四年一個閏年計算,平均每年就要多算出0.0078天,經過四百年就會多出大約3天來,因此,每四百年中要減少三個閏年。閏年的計算,歸結起來就是通常說的:四年一閏;百年不閏,四百年再閏。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章