中国暦(試行版)については こちら
HuTime Web API (Calendar Calculation) は、暦法の変換や暦法に基づく期間の計算を行う機能を提供する。暦日だけでなく、年号、暦年、暦月など、暦法に基づいて定められるさまざまな期間(以下、「暦日等」)を対象とした操作が可能である。
ここでは、Web APIの利用について、各処理に共通する事項を説明する。各処理に固有の事項は「各処理の詳細」を参照のこと。
各変数に必要な値を設定し、以下のURLにPOSTまたはGETメソッドで要求する。
http://ap.hutime.org/cal/
(例) グレゴリオ暦の暦日を和暦の暦日に変換する(GETメソッド)。
http://ap.hutime.org/cal/?method=conv&ical=101.1&itype=date&ival=2017-11-16&ocal=1001.1
APIをJSON-RPC 2.0に則って利用することもできる。この場合、POSTメソッドのみ利用可能であり、リクエストヘッダの content-type を application/json とする必要がある。
(例) グレゴリオ暦の暦日を和暦の暦日に変換する。
入力データとしての暦日等は、(1)暦に関するLinked Dataの暦リソース指定するか、または、(2)変数に必要な情報を設定することより指定する。なお、処理によっては下記の変数に加えて、iuri2 または ical2, itype2, ical2, iform2 の各変数に値を設定する。
変数iuriに暦リソース設定する。
(例) グレゴリオ暦の暦日、2017年11月17日を指定する場合(いずれも同じ暦日を指定)。
暦日等の暦法と型、および、暦日等を表す値または文字列をそれぞれ以下の変数に設定する。
| 指定子 | 暦日等の型 | 
|---|---|
| date | 暦日 | 
| month | 暦月 | 
| year | 暦年 | 
| era | 年号 | 
| 10y 100y 1000y | ~年代 (それぞれ、10, 100, 1000年間を示す) | 
| century millennium | 世紀、および、千年紀 (グレゴリオ暦とユリウス暦に由来する暦法でのみ指定可) | 
(例) グレゴリオ暦の暦日、2017年11月17日を指定する場合。
複数の暦日等を入力し、それらを一括して処理することが可能である。暦リソースによる指定では、それぞれのURIを改行(CRLF)で区切ってiuriに設定し、変数による指定では、ivalに設定するそれぞれの値を改行で区切る。暦リソースによる指定では、暦法および型の情報がそれぞれのURIに含まれるが、変数による指定ではicalおよびitypeに1つの値しか設定できない。このため、前者では暦法や型の異なる複数の暦日等を指定することができるが、後者では、icalおよびitypeに設定した暦法と型に限定される。
(例) 和暦の年号、大正、昭和、平成を指定する場合。改行は"\r\n"で表す。
暦日等に関する情報は、下記の指定子を変数opropに設定する。設定が省略された場合は、暦日等を表す文字列が出力される。複数の項目を出力することも可能であり、それぞれの指定子を";"で区切る。この場合、出力形式(変数out)がtextまたはtsvの場合は、タブ区切りで、csvの場合は、カンマ区切で複数の項目が出力される。また、出力形式(変数out)がjsonの場合は、指定子を変数名とする変数に値が収容される。
| 分類 | 指定子 | 型 | 出力内容 | 
|---|---|---|---|
| 日付文字列 | text val | 文字列 | 暦日等を表す文字列(既定値) (変数oformで書式指定可能) | 
| 時間範囲 | begin | 暦日等 | 期間の始点を表す暦日等 | 
| end | 暦日等 | 期間の終点を表す暦日等 | |
| jdBegin | 数値 | 範囲の始点を表すユリウス通日 | |
| jdEnd | 数値 | 範囲の終点を表すユリウス通日 | |
| 前後関係 | previous | 暦日等 | 前の暦日等 | 
| next | 暦日等 | 次の暦日等 | |
| 階層関係 | ofEra | 暦日等 | 属する年号 | 
| ofYear | 暦日等 | 属する暦年 | |
| ofMonth | 暦日等 | 属する暦月 | |
| 暦リソース | uri url iri | 文字列 | 暦リソースのURI | 
| label | 文字列 | 暦リソースのラベル | |
| その他 | dayDuration | 数値 | 期間の長さ(日数) | 
| calendarDuration | 文字列 | 期間の長さ(+年数-月数-日数) | |
| isLeap | 真偽値 | 閏であるかの正否 | 
出力される項目の型が暦日等である場合、その出力に対して再帰的に出力項目を指定することができる。たとえば、暦日のnext(つまり、翌日)は当然暦日であり、これに対する出力項目を指定して、「翌日の暦リソースのURI」を出力することができる。この場合、指定子を"."で繋ぎ、"next.uri"となる。さらに"next.next.uri"とすれば「翌々日の暦リソースのURI」を出力することもできるが、サーバへの負担を軽減するため、繋げられる指定子の数は3つまでに制限されている。
出力形式は変数outに以下の指定子を設定する。いずれも、出力されるデータの文字コードはUTF-8である。
| 分類 | 指定子 | 内容 | 
|---|---|---|
| テキスト | text | 生のテキスト(既定値) 入力データ(暦日等)ごとに、改行(CRLF)で区切られる。複数の出力項目を指定した場合は、タブで区切られる。tsvと同じだが、項目行はない。 | 
| csv | カンマ区切りテキストファイル(CSVファイル) 入力データ(暦日等)ごとに、レコードが生成される。1行目は項目行。 | |
| tsv | タブ区切りテキストファイル(TSVファイル) 入力データ(暦日等)ごとに、レコードが生成される。1行目は項目行。 | |
| json | JSONデータファイル 入力データ(暦日等)ごとに、オブジェクトが生成され、配列として返される。各オブジェクトは、出力項目の指定子を変数名とする変数を持ち、それぞれに値が収容される。 | |
| RDF | rdf | リクエストのcontent-typeにより異なる application/json: JSON形式のRDFデータファイル(rdf/json) それ以外: XML形式のRDFデータファイル(rdf/xml) | 
| rdf/xml | XML形式のRDFデータファイル | |
| rdf/turtle | turtle形式のRDFデータファイル | |
| rdf/json | JSON形式のRDFデータファイル | |
| rdf/ntriple | N3形式のRDFデータファイル | 
出力形式の設定が省略された場合は、リクエストヘッダのcontent-typeの設定値により、以下のとおりとなる。
入力データに問題があるなどで正常な処理できなかった場合、HTTPステータスコードにより以下のとおりエラー内容が返される。JSON-RPCの場合は、全て正常なHTTPレスポンスとして返され(HTTPステータスコードは200)、エラーの内容はJSON-RPCの規約に沿ってJSON形式で返される。
| ステータスコード | エラー内容 | 
|---|---|
| 401 | 必須の変数が設定されていない、または、値が不正である。 | 
| 404 | 該当する暦日等が無い(指定が不正である)。 | 
| 413 | POSTメソッドによるアクセス時に、ボディの長さが制限を超えている。 | 
変数opropの設定に基づいて、暦日等を表す文字列(日付文字列)、期間、前後関係や階層関係、閏の有無などの情報を取得する。
変数opropで指定した項目の内容。
ivalに改行で区切られた3つの暦年を表す文字列が入力されており、これらは一括で処理される。出力される文字列の書式は変数 oformに設定されており、バラバラな書式で表された3つの暦年が算用数字の暦年と干支を組み合わせた書式に統一される。
method = info
ical = 1001.1
itype = year
ival = 延宝八年\r\n元禄15年\r\n宝永己丑
oform = gy年yE
        
        
延宝8年庚申\r\n元禄15年壬午\r\n宝永6年己丑
        
      暦日等を異なる暦法の暦日等に変換する。
| epの設定値 | 変換の基準となる端点 | 
|---|---|
| b | 始点(既定値) | 
| e | 終点 | 
| be eb | 始点と終点 両者の結果が改行(CRLF)で区切られて返される。beとebでは出力の順番が変わる。 | 
変換された暦日等に関して、変数opropで指定した項目の内容。
「元禄年間」に対応する西暦年を得る。変換の基準になる端点は,始点と終点の両方が指定されているため(変数 ep), それぞれに対応する2つの西暦年が改行で区切られて出力される
method = conv
ep = be
iuri = http://datetime.hutime.org/calendar/1001.1/era/元禄
ocal = 101.1
otype = year
        
        
C.E. 1688\r\nC.E. 1704
        
      「元禄14 年3 月14 日の22 か月後」など、暦日等に期間を加算し、その結果の暦日等を得る。起点または加算する期間のいずれかを複数指定できる。両方を複数指定した場合は、起点の最初の暦日等に対して複数の期間が加算される。
| epの設定値 | 変換の基準となる端点 | 
|---|---|
| bb | 起点の始点~対象点の始点(既定値) | 
| ee | 起点の終点~対象点の終点 | 
| be | 起点の始点~対象点の終点 | 
| eb | 起点の終点~対象点の始点 | 
期間を加算された暦日等に関して、変数opropで指定した項目の内容。
元禄14年3月14日の22か月後の暦日を得る。加算される期間は和暦に基づいており(変数ical2)、22か月間は、年数、月数、日数の順で、"+0-22-0"と表現される(変数 ival2)。閏月(元禄15年閏8月)を含めた月数が計算される。
method = addCal
ep = bb
ical = 1001.1
itype = date
ival = 元禄14年3月14日
ical2 = 1001.1
ival2 = +0-22-0
        
        
元禄15年12月14日
        
      寛文7年8月11日と元禄14年3月14日の間は和暦で数えて何年何か月と何日」など、二つの暦日等(起点~対象点)の間の期間の長さを得る。起点または対象点のいずれかを複数指定できる。両者を複数指定した場合は、最初の起点と複数の対称点の間の期間について長さを計算する。
| epの設定値 | 計測に使用する端点 | 
|---|---|
| bb | 起点の始点~対象点の始点(規定値) | 
| ee | 起点の終点~対象点の終点 | 
| be | 起点の始点~対象点の終点 | 
| eb | 起点の終点~対象点の始点 | 
| odurの設定値 | 期間を表す型 | 
|---|---|
| ymd | ±[年数]-[月数]-[日数](規定値) | 
| md | ±0-[月数]-[日数] | 
| yd | ±[年数]-0-[日数] | 
| d | ±0-0-[日数] | 
起点と対象点の間の期間。期間を日数で表す場合(method = durDays)は、その数値が、年月日数で表す場合(method = durCal)は、odurの設定にしたがって期間を表す文字列が返される。計算に用いた対象点の端点が起点の端点よりも前の場合は、符号はマイナスとなる。
徳川綱吉の将軍在位期間を計算する(延宝8年7月18日~宝永6年1月10日)。出力される期間は、28年5か月23日間を示す。在位期間を求めるため、端点は始点から終点が指定されている。
method = durCal
ep = be
ical = 1001.1
itype = date
ival = 延宝8年7月18日
ical2 = 1001.1
itype2 = date
ival2 = 宝永6年1月10日
        
        
+28-5-23
        
      二つの暦日等の時間軸上の相対関係をAllen’s Time Interval Algebra に基づいて取得する。下図のA、Bいずれかについて、複数の暦日等を入力することが可能である。両者を複数入力した場合は、最初のAの暦日等について、複数のBの暦日等が比較される。
        
Allen's Time Interval Algebra, Allen (1983)より
      
二つの暦日等の時間軸上の相対関係。Allen's Time Interval Algebra に基づいて結果が返される。
和暦の元禄年間(1688-1704)とグレゴリオ暦の17世紀の相対関係を得る。結果のOverlappedByは、17世紀が先に始まり、両者が時間的に重なる部分を経て、元禄年間が後に終わることを示す。
method = comp
ical = 1001.1
itype = era
ival = 元禄
ical2 = 101.1
itype2 = century
ival2 = 17
        
        
OverlappedBy