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

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

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

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

Q&A

解決済

2回答

9059閲覧

日付文字列(yyyMMdd)からスマートに開始・終了日時(yyyy/MM/dd HH:mm:ss)に変換

toroleaman

総合スコア95

Java

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

0グッド

0クリップ

投稿2015/10/11 18:10

ある日付(yyyMMdd形式)の文字列から該当の日付0時以上、翌日の0時未満のデータを抽出するための文字列を作成するスマートな方法を知りたいです。
ただし、DBの時刻がGMTのため、GMTに変換する必要があります。

java

1 public void convertGMTTime(String argDate ) throws ParseException{ 2 DateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); 3 dateFormatter.setTimeZone(TimeZone.getTimeZone("JST")); 4 String strStart = argDate + " 00:00:00"; 5 Date startDate = dateFormatter.parse(strStart); 6 7 Calendar nextCal = Calendar.getInstance(); 8 nextCal.setTime(startDate); 9 nextCal.add(Calendar.DAY_OF_MONTH, 1); 10 Date endDate = nextCal.getTime(); 11 12 DateFormat dateFormatter2 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 13 dateFormatter2.setTimeZone(TimeZone.getTimeZone("GMT")); 14 15 String mStart = dateFormatter2.format(startDate); 16 String mEnd = dateFormatter2.format(endDate); 17 System.out.println(mStart); 18 System.out.println(mEnd); 19 } 20

ちなみに、java6、Linuxです。

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

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

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

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

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

guest

回答2

0

ベストアンサー

行数はほとんど変わっていませんが、こうすると少しだけスッキリすると思います。

lang

1 public void convertGMTTime(String argDate) throws ParseException { 2 // パーサー 3 DateFormat parser = new SimpleDateFormat("yyyyMMdd"); 4 parser.setTimeZone(TimeZone.getTimeZone("GMT")); 5 // フォーマッター 6 DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 7 formatter.setTimeZone(TimeZone.getTimeZone("GMT")); 8 9 // 開始日時取得 10 Date startDate = parser.parse(argDate); 11 String mStart = formatter.format(startDate); 12 13 // 終了日時取得 14 Calendar nextCal = Calendar.getInstance(); 15 nextCal.setTime(startDate); 16 nextCal.add(Calendar.DAY_OF_MONTH, 1); 17 nextCal.add(Calendar.MILLISECOND, -1); 18 String mEnd = formatter.format(nextCal.getTime()); 19 20 System.out.println(mStart); 21 // => 2015/10/12 00:00:00 22 System.out.println(mEnd); 23 // => 2015/10/12 23:59:59 24 }

投稿2015/10/12 06:09

argius

総合スコア9390

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

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

toroleaman

2015/10/13 13:56

String strStart = argDate + " 00:00:00"; しなくても Date startDate = dateFormatter.parse("20151015"); とすると、 時刻は、0時0分0秒になるんですね。 こうすると、コードがスッキリしますね。ありがとうございます。
guest

0

Java8であれば下記のような感じにできますが、Java7以下だと問題が多いDateやCalendarしか使えないため、すっきり書くことはできないと思います。

Java

1import java.time.ZonedDateTime; 2import java.time.ZoneId; 3import java.time.format.DateTimeFormatter; 4import java.time.format.DateTimeParseException; 5// ... 6 public void convertGMTTime2(String argDate ) throws DateTimeParseException { 7 ZonedDateTime zdt = ZonedDateTime.parse(argDate + "000000", 8 DateTimeFormatter.ofPattern("yyyyMMddHHmmss") 9 .withZone(ZoneId.of("JST", ZoneId.SHORT_IDS))); 10 DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss") 11 .withZone(ZoneId.of("GMT", ZoneId.SHORT_IDS)); 12 String mStart = zdt.format(dtf); 13 String mEnd = zdt.plusDays(1).format(dtf); 14 System.out.println(mStart); 15 System.out.println(mEnd); 16 }

【追記】
どうしてもJava7以下にする必要であれば、Joda-Timeを使うと同じようにすっきり書けるになると思います。Joda-Timeの使用か、Java8へのアップデートを検討してください。
参考 Qiita: Joda-Timeを使った日付処理まとめ

投稿2015/10/12 01:06

編集2015/10/12 01:13
raccy

総合スコア21735

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

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

toroleaman

2015/10/13 13:53

Java8へのアップグレードするといろいろメリットありそうですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問