2016-04-28 2 views
-3

申し訳ありませんが、ここではフォーラムで多くのことを調べましたが、上記のどれも私を助けませんでした。私は、文字列形式の日付を "yyyy-mm-ddThh:mm:ssZ"という形式でデータベースに格納しています。私は他の文字列と比較するために年、月、日だけをキャッチする必要があります。 私が得た最も近いものは、うまくいかないということでした。例えばyyyy-mm-DDThh:mm:ssZ

String dateArracoamento = arracoamento.getDate(); 

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ"); 
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = sdf.parse(dateArracoamento); 
String dateArracoamentoFormat = output.format(d); 

:マイdateArracoamento = 2016-04-28T10:10:10Z。私は完全な日付ではなく、2016-04-28だけを取得する必要があります。これどうやってするの?あなたは多くの情報を提供していない

+2

「うまくいかない」は、決して十分な情報ではありません。何が起こりますか? [mcve]を入力してください。 –

+0

明らかに彼はパーサーを実行できません。次にd = null –

+1

申し訳ありませんが、私はあなたが何を意味しているのか分かりません。 –

答えて

1

はあなたが解析できる可能性をその日付文字列は、出力の書式設定に使用しているのと同じフォーマッタを使用しています。

String input = "2016-04-28T10:10:10Z"; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    String output = dateFormat.format(dateFormat.parse(input)); 
+0

それは完璧に動作します、あなたが私をたくさん助けてくれてありがとう。どうもありがとうございます。 –

0

、しかし...

まず、dがnullでないことを確認して、あなたが任意の解析の例外をキャッチしていることは、ので、あなたの文字列形式の日付が正しく解析されています。その後、私はあなたが日付を比較するCalendarクラスを使用することをお勧めまたはあなたが望むように、年、月、日、等...

チェックこの例得る:

Date d = null; 
    try { 
     d = sdf.parse(dateArracoamento); 
     if (d != null) { 
      String dateArracoamentoFormat = output.format(d); 
      Calendar c = Calendar.getInstance(); 
      c.setTime(d); 
      c.get(Calendar.YEAR); 
      c.get(Calendar.MONTH); 
      c.get(Calendar.DAY_OF_MONTH); 
     } 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
0

その他の回答は古いレガシークラスを使用して古くなっています。

java.time

のJava 8に組み込まれており、後で面倒な古い日時のクラスを取って代わるjava.timeフレームワーク。

ISO 8601

あなたの入力文字列は、標準のISO 8601フォーマットであることを起こります。

java.timeクラスは、デフォルトで、日付時刻値の文字列表現の解析/生成時にISO 8601形式を使用します。したがって、書式設定パターンを指定する必要はありません。 Instant

Instant

nanosecondsの分解能でUTCにタイムライン上のモーメントを表します。

Instant instant = Instant.parse("2016-04-29T22:04:07Z"); 

LocalDate

LocalDateクラスは、日付のみなしの時日の時間帯なしを表します。そこに到達するには、ZoneOffsetのオフセットを適用してOffsetDateTimeオブジェクトを取得するかフルタイムゾーン(ZoneId)を取得してZonedDateTimeを取得します。

ZoneId zoneId = ZoneId.of("America/Montreal"); 
ZonedDateTime zdt = ZonedDateTime.ofInstant(instant , zoneId); 
LocalDate ld = zdt.toLocalDate(); 

おそらくあなたは本当にUTCにとどまるつもりでした。定数、ZoneOffset.UTCを使用してください。

OffsetDateTime odt = OffsetDateTime.ofInstant(instant , ZoneOffset.UTC); 
LocalDate ld = odt.toLocalDate();