質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • Java

    13795questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Javaのテキストを日付に変換したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 745

medroid

score 9

Javaで西暦、年号がバラバラのデータ(格納されている日付データの型はString型)の
フォーマットを整形したい場合の書き方を教えて頂きたいです。
例)2015年7月26日メモ書き------------
平成23年4月
2013年8月
平成24年11月メモ書き------------
上記のような記述を"yyyy-MM"で統一したいところです。

Javaのバージョンは1.8になります。

ご教示の程、宜しくお願いします。

追記:
回答頂きました皆様、参考になりました。
ありがとうございます。
今回はmasa_ohashi様をベストアンサーにさせてもらいました。
また、機会がありましたら宜しくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+2

import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class MultiDateFormatter {

    private static final Locale JAPAN = new Locale("ja", "JP", "JP");

    private static final DateFormat[] PARSERS = new DateFormat[] {
            new SimpleDateFormat("GGGGy年MM月dd日", JAPAN),
            new SimpleDateFormat("GGGGy年MM月", JAPAN),
            new SimpleDateFormat("yyyy年MM月dd日"),
            new SimpleDateFormat("yyyy年MM月"),
    };

    private static final DateFormat FORMAT = new SimpleDateFormat("yyyy-MM");

    public static String replace(String text) {

        for (DateFormat parser : PARSERS) {
            ParsePosition pos = new ParsePosition(0);
            Date date = parser.parse(text, pos);
            if (pos.getIndex() > 0) {
                return FORMAT.format(date) + text.substring(pos.getIndex());
            }
        }

        throw new IllegalArgumentException("Can't parse : " + text);
    }

    public static void main(String[] args) throws ParseException {
        String[] tester = new String[] {
                "2015年7月26日メモ書き------------ ",
                "平成23年4月",
                "2013年8月",
                "平成24年11月メモ書き------------",

                "1560年6月人間五十年、化天のうちを比ぶれば・・・",
                "昭和39年10月最強の敵は自分自身だ",
        };

        for (String line : tester) {
            System.out.println(replace(line));
        }
    }
}


実行結果(JDK1.7 で動作確認)

2015-07メモ書き------------ 
2011-04
2013-08
2012-11メモ書き------------
1560-06人間五十年、化天のうちを比ぶれば・・・
1964-10最強の敵は自分自身だ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/13 11:14

    ご回答ありがとうございます。
    参考になりました。

    キャンセル

checkベストアンサー

0

こんなもんですかね。平成表記と4桁西暦表記を正規表現で探し、SimpleDateFormatで解析、SimpleDateFormatで指定のフォーマットで出力、という流れです。

https://paiza.io/projects/KVjmbI_47rWkDRl7k_VFBw

public static String convert(String date) {
    Locale locale = new Locale("ja", "JP", "JP");
    SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM");
    Pattern heisei = Pattern.compile("(平成[\\d]+年[\\d]+月)");
    Matcher heiseiMatch = heisei.matcher(date);
    if(heiseiMatch.find()) {
        // 平成x年y月
        String temp = heiseiMatch.group(1) + "1日";
        SimpleDateFormat format = new SimpleDateFormat("GGGGy年M月d日", locale);
        try {
            return outputFormat.format(format.parse(temp));
        }
        catch(ParseException e) {
            e.printStackTrace();
        }
    }
    else {
        Pattern ad = Pattern.compile("([\\d]{4}年[\\d]+月)");
        Matcher adMatch = ad.matcher(date);
        if(adMatch.find()) {
            // 西暦
            String temp = adMatch.group(1) + "1日";
            SimpleDateFormat format = new SimpleDateFormat("y年M月d日");
            try {
                return outputFormat.format(format.parse(temp));
            }
            catch(ParseException e) {
                e.printStackTrace();
            }
        }
    }
    throw new RuntimeException("format error");
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/13 11:18

    一番、参考になりましたのでベストアンサーにさせて頂きました。
    また、機会がありましたら宜しくお願いします。

    キャンセル

0

以下でdata.txtに入れた例)のデータを変換して
data2.txtに書き込みます
平成以外が入る場合は別に内容を付け加える必要があります

import java.util.regex.*;
import java.io.*;
import java.util.*;

class LZ7 {
    public static void main(String[] args) {
        String reg = "(^平成[1-9][0-9]年[1]?[1-9]月|^[1-9][0-9][0-9][0-9]年[1]?[1-9]月)";
        String reg2 = "^[1-9][0-9][0-9][0-9]";
        String reg3 = "[1-9]?[0-9]";
        String reg4 = "[1-9][0-9][0-9][0-9]";
        String reg5 = "[1]?[1-9]月";
        ArrayList<String> p = new ArrayList<>();
        String sen = "";

        String seire = "";
        String mon = "";
        try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) {

            String data = "";
            while ((data = br.readLine()) != null) {
                Pattern pattern = Pattern.compile(reg);
                Pattern pattern2 = Pattern.compile(reg2);
                Pattern pattern3 = Pattern.compile(reg3);
                Pattern pattern4 = Pattern.compile(reg4);
                Pattern pattern5 = Pattern.compile(reg5);

                Matcher matcher = pattern.matcher(data);
                Matcher matcher2 = pattern2.matcher(data);
                Matcher matcher3 = pattern3.matcher(data);
                Matcher matcher4 = pattern4.matcher(data);
                Matcher matcher5 = pattern5.matcher(data);

                while (matcher.find()) {

                    if (data.contains("平成")) {
                        if (matcher3.find()) {
                            int c = Integer.parseInt(matcher3.group());
                            c = c + 1988;
                            seire = c + "";

                        }
                        if (matcher3.find())
                            mon = matcher3.group();

                    } else if (matcher2.find()) {
                        if (matcher4.find())
                            seire = matcher4.group();
                        if (matcher5.find())
                            mon = matcher5.group().substring(0,
                                    matcher5.group().length() - 1);

                    }

                    if (mon.length() == 1)
                        mon = "0" + mon;
                    p.add(seire + "-" + mon);
                }

            }

        } catch (Exception e) {
        }

        try (PrintWriter pw = new PrintWriter("data2.txt")) {
            for (String g : p) {
                pw.println(g);
            }
        } catch (Exception e) {
        }
    }
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/02/13 11:18

    ご回答ありがとうございます。
    参考になりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13795questions

    Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。