- PR -

翌月の算出方法

1
投稿者投稿内容
いち
会議室デビュー日: 2003/06/09
投稿数: 12
投稿日時: 2004-07-07 16:13
文字列で年月があり、その年月の翌年月を算出したいのですが、簡単に行う方法
はございますでしょうか?
(例)
String tounengetu="2004/07"
↓下記に変換
tounengetu="2004/08"

元の年月が12月の時は年もUP
String tounengetu="2004/12"
↓下記に変換
tounengetu="2005/01"


Calendarクラスを調べたのですが、どのメソッドをどのように使用すればよいのか
わからず、困っています。
JAVA初心者です。

ご存知の方、ご教示頂けますようにお願いします。

[ メッセージ編集済み 編集者: いち 編集日時 2004-07-07 16:15 ]
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-07 16:22
引用:

String tounengetu="2004/07"
↓下記に変換
tounengetu="2004/08"


そもそも、まずこの「文字列で表された年月」をどのようにjava.util.Calendarに変換されるおつもりでしょう?

もし具体的な方策が思いつかないのでしたら、ヒントをば。
抽象クラスjava.text.DateFormat及びその具象サブクラスであるjava.text.SimpleDateFormatクラスを見てみましょう。DateFormat#parse(String)を使うとjava.util.Dateが取得できますが、これをjava.util.Calendarに変換するのは簡単です。

Calendarオブジェクトが取得できたら、後は年と月を取得して適当にお望みの処理を行ってやれば良いですよね。年と月の取得は、java.util.Calendar#get(int)によって可能です。取得した値は数値ですから、比較や加算は思いのままですよね?

最後に、CalendarをStringに戻すのにもjava.util.DateFormatを使います。今度はparseではなく、formatメソッドが使えますよ。一度java.util.Dateを経由しますが、それほど難しくありません。

敢えて答えを書かずに回りくどく書きましたが、まずはJ2SEのJavadocを見てアタリをつけてみて下さいまし。

Good Luck !

# 念のため。。。J2SE 1.4.0の日本語版Javadocは以下にあります。
# http://java.sun.com/j2se/1.4/ja/docs/ja/api/
# もし他のバージョンが良いのでしたら、SunのJavaサイトから辿って下さいまし。
# http://java.sun.com/

[ メッセージ編集済み 編集者: おばけ 編集日時 2004-07-07 16:27 ]
わたびん
常連さん
会議室デビュー日: 2003/02/26
投稿数: 24
投稿日時: 2004-07-07 17:10
もしyyyy/MMときまっているのであれば
Calendar#public void set(int field,int value)
をつかうってのはどうですか?

適当に書くとこんなかんじで
<code>
public static String getNextMonth(String date) {
Calendar cal = GregorianCalendar.getInstance();
cal.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.parseInt(date.substring(5)));
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM");
return sdf.format(cal.getTime());
}
</code>

[ メッセージ編集済み 編集者: わたびん 編集日時 2004-07-07 17:24 ]
会議室デビュー日: 2004/06/21
投稿数: 11
投稿日時: 2004-07-07 18:07
ども。

え〜と、、Calendarに変換したら、Calendar#add(int, int) を使えば済むのでは。
わたびんさんの変数をそのまま使わせてもらって、、
コード:

cal.add(Calendar.MONTH, 1);



Calendar#add使わなくても、Calendar#set(int, int)ででも可能だから、
またまた、わたびんさんのお借りして、、

コード:

cal.set(Calendar.MONTH, Integer.parseInt(date.substring(5)) + 1 );



で、できると思うんだが、、どうでしょう?

引用:

敢えて答えを書かずに回りくどく書きましたが、まずはJ2SEのJavadocを見てアタリをつけてみて下さいまし。



すいませんです、簡単に答えてしまいました。。
ただ、おばけさんの言う通り、まずはJavadoc見て、アタリをつけてそれらしいの見つけたら
使ってみるってのがいいですね。

追記:
なんか、Calendarクラスを使うのが前提なのかどうかしらんが、単に翌月なら
年と月を分割して、月が12だったら年を+1して月を1に、それ以外なら月を+1
すれば済むような話のような気がするのは俺だけ?

[ メッセージ編集済み 編集者: 格 編集日時 2004-07-07 18:16 ]
カーニー
ぬし
会議室デビュー日: 2003/09/04
投稿数: 358
お住まい・勤務地: 東京
投稿日時: 2004-07-08 12:25
引用:

追記:
なんか、Calendarクラスを使うのが前提なのかどうかしらんが、単に翌月なら
年と月を分割して、月が12だったら年を+1して月を1に、それ以外なら月を+1
すれば済むような話のような気がするのは俺だけ?



では、そんな感じで。

コード:
public class Test {
    public static void main(String[] args) {
        String[] arr = args[0].split("/");
        
        int year = Integer.parseInt(arr[0]);
        int month = Integer.parseInt(arr[1]);
        
        year += month / 12;
        month = month % 12 + 1;
        
        System.out.println("" + year + "/" + month);
    }
}



月が2桁先行ゼロじゃないけど。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-08 15:03
引用:

単に翌月なら年と月を分割して、月が12だったら年を+1して月を1に、
それ以外なら月を+1すれば済むような話のような気がするのは俺だけ?


です。要はそういうことだと思います
私が書くとしたら、まさにおっしゃるようなコードを書くと思います。

まあ、ここでの問題って、「文字列型の年月とカレンダー型の変換」なのかなって
思いました。まだいちさんは初心者のようですから、java.text.DateFormatなんて
知らないかも、と思って示唆したまでです。

JavaはJDKのクラスライブラリを使いこなすだけでもかなり大変ですから(偉そうな
ことを言っても私もぜんぜん使いこなせてません)、ポイント(クラス名とか)
だけ伝えてあげて、あとはJavadocの海をひたすら泳いで頂くと良いのかな、と。

ところで、いちさんは行方不明のようですが、ご無事でしょうか?
Javadocの海で溺れてないですよねぇ??
会議室デビュー日: 2004/06/21
投稿数: 11
投稿日時: 2004-07-08 17:09
引用:

おばけさんの書き込み (2004-07-08 15:03) より:
です。要はそういうことだと思います
私が書くとしたら、まさにおっしゃるようなコードを書くと思います。

まあ、ここでの問題って、「文字列型の年月とカレンダー型の変換」なのかなって
思いました。まだいちさんは初心者のようですから、java.text.DateFormatなんて
知らないかも、と思って示唆したまでです。


なる、そういうことね。なんでCalendarオブジェクト作成しておきながら、
getして処理しろって言ってるんだろうってちょっと不思議に思ってた〜よ。
おばけ
ぬし
会議室デビュー日: 2002/11/14
投稿数: 609
お住まい・勤務地: 東京都江東区
投稿日時: 2004-07-08 19:49
引用:

なる、そういうことね。なんでCalendarオブジェクト作成しておきながら、
getして処理しろって言ってるんだろうってちょっと不思議に思ってた〜よ。


まあ、rollとかも使えますけれど、ここではちょっと混乱を招くかな、
な〜んて要らん老婆心を発揮していました。よく知らないのでしたら、
とりあえずgetから入った方が良いかな、と。

ご本人がきちんと理解されるのであれば、どんな回答でもオッケーなんです
けれどね
1

スキルアップ/キャリアアップ(JOB@IT)