こんにちは!

Javaのクラスで”Calender”とか”DateFormat”というクラスで
西暦から和暦とかに変換しようとしてみたんですが、
うまくいきません。

使用方法が間違っているのか、使うクラスが違うのか、
もし知ってる方がいらっしゃいましたら、
教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

xinmanです。


稚拙なコードですがこんなクラスでいかがでしょうか?

import java.util.*;

public class Wareki {
/*明治*/
private static final int I_MEIJI= 1868;
private static final int I_MEIJI_M= 9;
private static final int I_MEIJI_D= 8;
/*大正*/
private static final int I_TAISHOU= 1912;
private static final int I_TAISHOU_M= 7;
private static final int I_TAISHOU_D= 30;
/*昭和*/
private static final int I_SHOUWA= 1926;
private static final int I_SHOUWA_M= 12;
private static final int I_SHOUWA_D= 25;
/*平成*/
private static final int I_HEISEI= 1989;
private static final int I_HEISEI_M= 1;
private static final int I_HEISEI_D= 8;

private String strGengou = null;
private Date date = null;

/*コンストラクタ*/
/*int iY西暦年*/
/*int iM月*/
/*int iD日*/
public Wareki(int iY,int iM,int iD){
setSeireki(iY,iM,iD);
}
/*コンストラクタ*/
/*int strG和暦元号*/
/*int iY和暦年*/
/*int iM月*/
/*int iD日*/
public Wareki(String strG,int iY,int iM,int iD){
setWareki(strG,iY,iM,iD);
}
/*西暦設定*/
/*int iY西暦年*/
/*int iM月*/
/*int iD日*/
public void setSeireki(int iY,int iM,int iD) {
strGengou = new String("明治以前");
if((iY>I_MEIJI)||(iY==I_MEIJI&&iM>I_MEIJI_M)||(iY==I_MEIJI&&iM==I_MEIJI_M&&iD>=I_MEIJI_D)){
strGengou = new String("明治");
}
if((iY>I_TAISHOU)||(iY==I_TAISHOU&&iM>I_TAISHOU_M)||(iY==I_TAISHOU&&iM==I_TAISHOU_M&&iD>=I_TAISHOU_D)){
strGengou = new String("大正");
}
if((iY>I_SHOUWA)||(iY==I_SHOUWA&&iM>I_SHOUWA_M)||(iY==I_SHOUWA&&iM==I_SHOUWA_M&&iD>=I_SHOUWA_D)){
strGengou = new String("昭和");
}
if((iY>I_HEISEI)||(iY==I_HEISEI&&iM>I_HEISEI_M)||(iY==I_HEISEI&&iM==I_HEISEI_M&&iD>=I_HEISEI_D)){
strGengou = new String("平成");
}
this.date = new Date(iY-1900,iM-1,iD);
}
/*和暦設定*/
/*int strG和暦元号*/
/*int iY和暦年*/
/*int iM月*/
/*int iD日*/
public void setWareki(String strG,int iY,int iM,int iD) {
if(strG.equals("明治")){
iY = iY + I_MEIJI - 1;
}else if(strG.equals("大正")){
iY = iY + I_TAISHOU - 1;
}else if(strG.equals("昭和")){
iY = iY + I_SHOUWA - 1;
}else if(strG.equals("平成")){
iY = iY + I_HEISEI - 1;
}
strGengou = new String("明治以前");
if((iY>I_MEIJI)||(iY==I_MEIJI&&iM>I_MEIJI_M)||(iY==I_MEIJI&&iM==I_MEIJI_M&&iD>=I_MEIJI_D)){
strGengou = new String("明治");
}
if((iY>I_TAISHOU)||(iY==I_TAISHOU&&iM>I_TAISHOU_M)||(iY==I_TAISHOU&&iM==I_TAISHOU_M&&iD>=I_TAISHOU_D)){
strGengou = new String("大正");
}
if((iY>I_SHOUWA)||(iY==I_SHOUWA&&iM>I_SHOUWA_M)||(iY==I_SHOUWA&&iM==I_SHOUWA_M&&iD>=I_SHOUWA_D)){
strGengou = new String("昭和");
}
if((iY>I_HEISEI)||(iY==I_HEISEI&&iM>I_HEISEI_M)||(iY==I_HEISEI&&iM==I_HEISEI_M&&iD>=I_HEISEI_D)){
strGengou = new String("平成");
}
this.date = new Date(iY-1900,iM-1,iD);
}
/*和暦元号取得*/
public String getStrGengou(){
return strGengou;
}
/*和暦年取得*/
public int getIWarekiYear(){
int iY = this.date.getYear() + 1900;
if(getStrGengou().equals("明治")){
iY = iY - I_MEIJI + 1;
}else if(getStrGengou().equals("大正")){
iY = iY - I_TAISHOU + 1;
}else if(getStrGengou().equals("昭和")){
iY = iY - I_SHOUWA + 1;
}else if(getStrGengou().equals("平成")){
iY = iY - I_HEISEI + 1;
}
return iY;
}
/*西暦年取得*/
public int getISeirekiYear(){
return this.date.getYear() + 1900;
}
/*月取得*/
public int getIMonth(){
return this.date.getMonth() + 1;
}
/*日取得*/
public int getIDate(){
return this.date.getDate();
}
}
    • good
    • 0
この回答へのお礼

こ、こんなすてきなソースがいただけるとは。。。
非常に感激です!!!

ほんとうにもうみなみなさまのおかげです。
どうもありがとうございました。

お礼日時:2001/03/17 05:07

Javaに西暦と和暦を変換するクラスは今のところ実装されていません。


必要であれば、
1868年9月8日から1912年7月29日までをと明治する
1912年7月30日から1926年12月24日までをと大正する
1926年12月25日から1989年1月7日までをと昭和する
1989年1月8日から平成する
というロジック自分で用意しなけれなりません。

”DateFormat”クラスはalfeimさんの回答に加えて英語表記で”AD”となるところを日本語表記で”西暦”と表記してくれる機能がありますが和暦への対応はしてません。
    • good
    • 0
この回答へのお礼

なるほど、
やはりクラスはなく自分でロジックを
組まなければいけないんですね。。。

今まで、考えたことがなかったんですが、

>1868年9月8日から1912年7月29日までをと明治する
>1912年7月30日から1926年12月24日までをと大正する
>1926年12月25日から1989年1月7日までをと昭和する
>1989年1月8日から平成する

そういうロジックを入れなければいけないんですね!
でも、それはどういったロジックになるのでしょうか。。。?
もし、差し支えなければ教えてください。

とにかくどうもありがとうございました。

お礼日時:2001/03/05 21:38

自分で実装しないと無いんじゃないでしょうか?


多分DateFormatはYYYY/MM/DDをDD/MM/YYにしたりするようなものだと思いますけど・・・

作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか色々問題があると思いますが・・・
    • good
    • 0
この回答へのお礼

ありがとうございます。
やはりそういうものなんですね。

>作るとしても昭和64年をどう処理するか?とか平成元年は1月7日からなのか?とか>色々問題があると思いますが・・・

そこまで考えていなかったんで
これから考えてみます。

どうもありがとうございました。

お礼日時:2001/03/05 21:20

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessで和暦でも西暦でも入力・表示可能にするには?

Accessのフォームで生年月日を入力するテキストボックスを配置しています。

基本は和暦入力なのですが、外国人の方もいるため、西暦入力のこともあるのです。
和暦で入力した場合は和暦で、西暦で入力した場合は西暦で表示されるようにしたいのですが、何かよい方法はないでしょうか?

Aベストアンサー

最初に日付型について、理解してみましょう!

1900/01/01 = 1として、1日を+1づづしてます
2009/03/02 = 39,509として、実際、保管されてます

ですので、保管している状況では、和暦/西暦が、実際は、無関係です
これを書式、定型入力で入力し、上記のように、数値に変換、保管、表示するときに、再度、変換表示してるものです

これを和暦/西暦を保管して、更に、表示で再現するとなると・・・
変換せずテキストにするか?
(ただし、入力チェックは、モジュール化する必要があり)
別のフィールドに、和暦/西暦の表示フラグ的なものを作り、クエリにて、入力用と、表示用のフィールドを2つ設定する必要が、あります

どっちにしても、簡単には、出来そうに無いね^^;

Qjavascriptで入力フォームに日付(和暦)を入力して西暦表示にする方法と曜日を表示させる方法を教えて下さい。

凄く悩んでいるのですが、良かったら教えてください。
入力フォームに

日付 平成16年07月28日なら
『160728』 と入力し、そのすぐ横に
曜日を『(月)』と表示させたい
のですが、どうもうまくいきません。
教えてください。
以前教えていただいた西暦「20040728」
と入力したら、(水)と出たのですが、
和暦入力の場合でわからなくて、困っています。

テキストフォームに(月)と表示させたいのでは
なく、<span>タグを使用して作成したいのです。

また、和暦を『160728』入力したら、
表示先には、西暦「20040728」と表示させる
には、どうしたらいいでしょうか?

ご伝授お願いします。

Aベストアンサー

以前の回答のjavascriptを少し変更しただけですけど。#1の方がおっしゃる通り、1988をたしてみました。これだと平成しか対応してませんが。

<HTML><BODY>
<INPUT TYPE="TEXT" VALUE="" onKeyUp="if(this.value.length == 6) document.all['spnDay'].innerHTML = getDay(this.value);"><SPAN ID="spnDay"></SPAN>
<SCRIPT>
var STR_DAY = new Array("日", "月", "火", "水", "木", "金", "土");
var i;
function getDay( yymmdd ) {

var year = yymmdd.substring(0, 2) -(-1988);
var month = yymmdd.substring(2, 4) -1;
var date = yymmdd.substring(4, 6);

var month2 = yymmdd.substring(2,4);

var yyyymmdd = year + month2 + date;
var dateValue = new Date();
dateValue.setFullYear(year, month, date);

return STR_DAY[dateValue.getDay()]+yyyymmdd;

}
</SCRIPT>
</BODY></HTML>

以前の回答のjavascriptを少し変更しただけですけど。#1の方がおっしゃる通り、1988をたしてみました。これだと平成しか対応してませんが。

<HTML><BODY>
<INPUT TYPE="TEXT" VALUE="" onKeyUp="if(this.value.length == 6) document.all['spnDay'].innerHTML = getDay(this.value);"><SPAN ID="spnDay"></SPAN>
<SCRIPT>
var STR_DAY = new Array("日", "月", "火", "水", "木", "金", "土");
var i;
function getDay( yymmdd ) {

var year = yymmdd.substring(0, 2) -(-1988);
var month = yy...続きを読む

QAccess2007で、西暦と和暦を両方使うが、変換が分からない。

Windows7でAccess2007を使っています。テーブル内に日付が西暦と和暦
の二つが有り、通常は西暦で入力をします。然し、表示には西暦と和暦
を出したいのですが。変換が分かりません。

テーブル内には入力の西暦しか無く、表示の前に更新クエリーで西暦の
フィールドを読んで和暦のフィールドを更新したいのですが。簡単に出
来る方法は無いのでしょうか。

宜しく、お願いします。

Aベストアンサー

和暦と西暦の二つのフィールドを設定する必要があるのかな?
クエリのデザイングリッドに新たなフィールドを追加
和暦だよーん:[西暦]
とし、Alt + Enter を押して[和暦だよーん]フィールドのプロパティを表示させます。
その書式のところに、ggge\年mm\月dd\日
とすれば今日だと西暦2016/3/5|和暦だよーん平成28年03月05日
になります。
相互に変更可能ですから二つのフィールドを設定するよりも・・・。
gやmの数はお好みで変更を。

Q和暦クラスについて

西暦から和暦に変換できるプログラムを勉強して開発したいのですが

例20120705 →  平成24年7月5日

javaでなにか良い和暦クラスがありますでしょうか??
サンプルコード等あれば助かります。
よろしくお願いします。

Aベストアンサー

http://ideone.com/BfabA

Q保育士試験対策・・年号は和暦・西暦のどちらで覚えるべき?

今年の保育士試験を受験しようと考えています。勉強で、人物や出来事等を年号と共に覚えなければいけない事項もありますが、和暦で覚えた方がいいのでしょうか。それとも西暦で覚えた方がいいのでしょうか。実際、過去の試験問題では西暦と和暦のどちらで出題されたのでしょうか。できれば和暦か西暦かのどちらかだけを覚えた方が負担が少ないので教えてください。

Aベストアンサー

こんにちは。

保育士試験の勉強に年号の知識は不要だと思いますが・・・

過去問をざっと見る限り、法令や制度の施行年は和暦。
年代を表すときは「1990年代」「1970年代」など西暦。
で統一されているみたいです。

参考までに。

QCalenderクラスを使うと変?

サーブレットで現在の日付と時刻を取得しようとして、まず、日付と時刻を表示させるプログラムを書きました。

APIドキュメントで探すとDateクラスのgetDate等が推奨されていないということだったので、Calendarクラスを使いました。

すると、月の表示がおかしいのです。年と日と時間はあっているのですが、月が10月になっているのです。(ちなみに今日なので、11月になるハズ・・・)

パソコンの日付と時刻も今日(11月7日、タイムゾーン(GMT+09:00)大阪、札幌、東京)です。

そこで、DATEクラスを使うとちゃんと11月になっています。

どういうことなのでしょうか?


import java.util.*;

class Hiduke {
   public static void main(String args[]) {

     System.out.println(Calendar.getInstance());

     Calendar calendar = Calendar.getInstance();
     System.out.println(calendar.get(Calendar.YEAR));
     System.out.println(calendar.get(Calendar.MONTH));
     System.out.println(calendar.get(Calendar.DAY_OF_MONTH));

     Date d = new Date();
     System.out.println(d);
   }
}

java.util.GregorianCalendartime=1036634060997,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=32400000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],
firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2002,MONTH=10,WEEK_OF_YEAR=45,WEEK_OF_MONTH=2,
DAY_OF_MONTH=7,DAY_OF_YEAR=311,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,
AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=54,SECOND=20,MILLISECOND=997,ZONE_OFFSET=32400000,DST_OFFSET=0]
2002
10
7
Thu Nov 07 10:54:21 JST 2002

サーブレットで現在の日付と時刻を取得しようとして、まず、日付と時刻を表示させるプログラムを書きました。

APIドキュメントで探すとDateクラスのgetDate等が推奨されていないということだったので、Calendarクラスを使いました。

すると、月の表示がおかしいのです。年と日と時間はあっているのですが、月が10月になっているのです。(ちなみに今日なので、11月になるハズ・・・)

パソコンの日付と時刻も今日(11月7日、タイムゾーン(GMT+09:00)大阪、札幌、東京)です。

そこで、DATEクラスを...続きを読む

Aベストアンサー

別に変ではないです。

フィールド MONTH は、1月が0になります。参考URL の API Document を参照ください。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/util/Calendar.html#MONTH

Q日付データの西暦・和暦について

よろしくお願いします。
Vb2005とAccess2003でWinアプリを開発しています。
データベースに日付データを西暦で蓄積して、期間合計を出したりその他の処理を行っていました。
フォーム上にDateTimePikerやMonthCalendarといったユーザーコントロールを配置していますが、これも西暦です。
印刷等もすべて西暦表示で行っています。
これを、すべて和暦にして欲しいと言われたのですが、Accessのデータベースも和暦で日付データを蓄積するのが良いのでしょうか?
それとも、フォーム上で和暦で入力されたデータを西暦に変換して蓄積するほうが普通なのでしょうか?
元号が変更になった場合等を考えれば、帳票類も西暦のほうがプログラムの変更(更新)の手間がなく良いような気がするのですが、和暦って結構ニーズがあったりしますでしょうか?(私は経験が浅いのでよくわからず、素朴な疑問です)
DateTimePikerの和暦表示については、紹介サイトがあったのですが、MonthCalendarについては和暦表示できるのかわかりませんでした。方法がありましたら教えてください。
日付の西暦・和暦について、アプリケーションを作るうえでのアドバイス等もありましたらあわせてお願い致します。

よろしくお願いします。
Vb2005とAccess2003でWinアプリを開発しています。
データベースに日付データを西暦で蓄積して、期間合計を出したりその他の処理を行っていました。
フォーム上にDateTimePikerやMonthCalendarといったユーザーコントロールを配置していますが、これも西暦です。
印刷等もすべて西暦表示で行っています。
これを、すべて和暦にして欲しいと言われたのですが、Accessのデータベースも和暦で日付データを蓄積するのが良いのでしょうか?
それとも、フォーム上で和暦で入力されたデータ...続きを読む

Aベストアンサー

accessにデータを入れているのであれば、日付型のデータを使うのがよいと思います。場合によっては テキスト型(YYYYMMDD)の方が便利なときがあります。
表示(印刷)させるときに表示形式をformat関数などで調整するのが一番手がかからないと思います。 コンピュータの日付の表示を変えればコントロールの表示は変わる野ではないかと思います。(vb6のmonthviewではそうでした。)コントロールパネル→地域と言語のオプションで地域オプションの日付の表示方式を和暦にすれば表示されると思います。 ただしこれはコンピュータ自体の設定ですので、可能かどうかはユーザーさんに聞いてみないといけませんね。
もしも設定の変更が不可能ならカレンダーコントロールの上にテキストボックスを貼り付けてしまうとか、何とでもなると思います。
和暦のニーズとしては、お役所に提出する書類は和暦を使うものがほとんどだと思いますので、それなりにニーズはあると思います。 あと、桁数が少ないので、入力のキーストロークが少なくなるというのもあります。

Q和暦変換フォーマット用メソッドについて

private void 生年月日編集(String 生年月日, PrintWriter out) {

SimpleDateFormat sdf1 = new SimpleDateFormat(生年月日);
sdf1.setLenient(false);
Date d = sdf1.parse("20120705", new ParsePosition(0));

SimpleDateFormat sdf2 = new SimpleDateFormat("GGGGyyyy年M月d日", new Locale("ja", "JP", "JP"));


System.out.println(sdf2.format(d));

上記の和暦変換プログラムを
フォーマット用メソッドとして和暦変換プログラムを呼び
だすようにしたいのですが
うまくいきません。
アドバイスよろしくお願いいたします。

Aベストアンサー

何をいっているのかさっぱりわからんけど....

「引数に String 一つを取るフォーマット用メソッドを作りたい」と言ってるんだけど, 「引数」とは何を表し, 何を返すの?

QAccess 西暦を和暦へ一括変換できますか?

西暦と和暦が混在しています。
これを和暦へ統一することはできるのでしょうか(逆の西暦への統一も)
1年づつ更新するのは面倒で・・・。

Aベストアンサー

西暦への変換の更新クエリです。

UPDATE テーブル名 SET フィールド1 = Format(CDate([フィールド1] & "1月1日"),"yyyy\年");

和暦の場合は、"yyyy\年" を "ggge\年" に。

QRSSの日付を和暦にしたい

お世話になっています。

http://samurai614.blog29.fc2.com/blog-entry-26.html

このサイトを見て、JsでRSSをページ内に埋め込むことはできました。
この投稿日時を和暦表記に変えたいのですが、そういったことは可能なのでしょうか?

ご存知の方、ご教示お願い致します。

Aベストアンサー

ふぁいあ~ふぉっくすならうごくとおもふ。
setTimeout (
 (function (replaceTimeStamp) {
  return function () {
   Array.prototype.forEach.call (
    document.getElementsByClassName ('rss-date'),
    replaceTimeStamp);
  };
 })(
  function (tNode) {
   var d = new Date (tNode.textContent);
   tNode.textContent = [
    '平成', d.getFullYear ()-1988, '年',
    d.getMonth () + 1, '月',
    d.getDate (), '日 ',
    d.getHours (), '時',
    d.getMinutes (), '分'
   ].join ('');
  })
 ,
 2000);


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報