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

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

新規登録して質問してみよう
ただいま回答率
85.48%
date

dateは、date型や日付に関する関数や処理についてのタグです

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Java

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

Q&A

解決済

4回答

10694閲覧

文字列(5パターン)→yyyy/mm/dd に変換したい

sena0818

総合スコア7

date

dateは、date型や日付に関する関数や処理についてのタグです

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

Java

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

0グッド

0クリップ

投稿2018/12/27 05:49

実現させたいこと
下記の形式で文字列が来た際に、フォーマットし日付形式に変換したい。

Input
①yyyy/MM/dd
②yyyy/M/d
③yy/MM/dd
④yy/M/d
⑤yyMMdd

Output
yyyy/mm/dd

どなたかわかる方いましたらご教示ください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/12/27 05:55

今ご自身ではどの段階でしょうか? 「調べたが見つかっていない」「調べて試したが実現に至っていない」「調べたが内容が理解できていない」「調べていない」etc... このあたり、ご自身の状況が判るように質問を再編してください。「調べていない」だとそれは質問する段階に至っていません。
sena0818

2018/12/27 06:02

「調べたが見つかっていない」この段階です。
m.ts10806

2018/12/27 06:07 編集

でしたら、どのようなキーワードで調べたのか、参考にした記事があればそれも提示してください。 調べ方が良くないとどんな容易な問題であっても的確な結果はでてきません。 調べ方が良くないかどうかは提示されないと誰も分かりません。 見ている人は質問に書いてある内容でしか状況を把握できませんので。 「やってほしいことだけを記載した丸投げの質問」という指摘はそこから来ています。 「まず調べて1度は自分でやってみよう」というのがteratailの方針です。(「質問するときのヒント」参照)
sena0818

2018/12/27 06:11

DateTime dt = DateTime.ParseExact("2018/10/10" , "yyyy/MM/dd", System.Globalization.CultureInfo.CurrentCulture); 上記のコードを利用してPegaというクラウドシステム上で質問内容の実現をしようと試みましたが関数を認識してくれませんでした。 また、調べた内容を羅列すると質問の本質が分かりにくくなるかと思い実現させたいことのみ記載させていただきました。
m.ts10806

2018/12/27 06:15

質問は編集できるので適宜ご対応ください。 「質問テンプレート」に「試したこと」という項目があるように、なるべく書き出すべきかと思います。質問の本質とは言っても、調べ方に誤りがあればそこを軌道修正しないことには今後もいつまでたっても自己解決できないことになります。「的確な調べ方を知っていることも技術力の内」です。
azuapricot

2018/12/27 06:15

調べたが、見つかっていないのでしたら調べ方を見直す必要がありますね 「Java 日時 フォーマット変更」でGoogle検索すればやりたいことが山のように出てきます。 https://teratail.com/questions/11127 teratailでも既に似たような質問はあります。
guest

回答4

0

文字列のパターンを判定するところを考えるのが大事なのでしょうね。

java

1import java.time.LocalDate; 2import java.time.format.DateTimeFormatter; 3 4/** 5 * @author a-pz 6 * 7 */ 8public class DateFormatterUtil { 9 public String format(String input) { 10 if (input == null) { 11 throw new RuntimeException("文字列が未定義"); 12 } 13 14 String pattern = null; 15 if (input.contains("/")) { 16 if (input.indexOf("/") == 2) { 17 pattern = "yy/M/d"; 18 } else { 19 pattern = "yyyy/M/d"; 20 } 21 } else { 22 pattern = "yyMMdd"; 23 } 24 DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); 25 LocalDate target = formatter.parse(input, LocalDate::from); 26 27 return DateTimeFormatter.ofPattern("yyyy/MM/dd").format(target); 28 } 29} 30

なんかの課題かだと思いますけれど。

java

1import spock.lang.Specification 2 3class DateFormatterUtilTest extends Specification { 4 DateFormatterUtil sut = new DateFormatterUtil() 5 6 def "検証"() { 7 expect: 8 $result == sut.format(input) 9 10 where: 11 input || $result 12 "2018/12/27" || "2018/12/27" 13 "2018/2/28" || "2018/02/28" 14 "18/9/30" || "2018/09/30" 15 "18/9/1" || "2018/09/01" 16 "180731" || "2018/07/31" 17 } 18} 19

投稿2018/12/27 07:48

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

・スラッシュ/で分解し、各数値から日付形式に変換、フォーマットに合わなければエラーを出す?
・スラッシュがない場合、文字数で文字列を分解、各数値から日付方式に変換。フォーマットに合わなければエラー?

投稿2018/12/27 06:13

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1public class MainXXX { 2 public static void main(String[] args) { 3 String[] strs = { 4 "2018/01/01", "2018/1/2", "18/01/03", "18/1/4", "180105", 5 "20190101", "2019-01-02" 6 }; 7 for (String str : strs) { 8 try { 9 System.out.println(str + "\t->" + normalized_date_str(str)); 10 } catch (Exception e) { 11 // e.printStackTrace(); 12 System.out.println("Bad Format: [" + str + "]"); 13 } 14 } 15 } 16 static String normalized_date_str(String str) throws Exception { 17 String x; 18 if (str.length() == 6 && str.indexOf("/") < 0) { 19 x = str.substring(0, 2) + "/" + str.substring(2, 4) + "/" + str.substring(4, 6); 20 } else { 21 x = str; 22 } 23 String[] nums = x.split("/"); 24 int y = Integer.parseInt(nums[0]); 25 int m = Integer.parseInt(nums[1]); 26 int d = Integer.parseInt(nums[2]); 27 if (y < 100) { 28 y += 2000; 29 } 30 return String.format("%d/%02d/%02d", y, m, d); 31 } 32}

実行例
イメージ説明

2018/02/30 をエラーにするなどの処理はしていません。
チェックが必要なら、変換結果の "yyyy/mm/dd" を Data クラスで parse してチェックればよいです。

投稿2018/12/27 10:26

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あまりさっさと解決されない方が良いかと・・・。

Dateで取り込んでSimpleDateFormatでフォーマットすればカバーできそうですけど。
年2桁の場合は取り込む前に18→2018とか変換かけても良いですし。

投稿2018/12/27 06:26

編集2018/12/27 06:29
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問