2016-07-08 42 views
4

フォーマットを2016-07-08T00:00:00.000Zにしようとしています。時間、分、秒、およびミリ秒をゼロにするにはどうすればよいですか?

String myDate = "20160708"; 
LocalDate myLocalDate = LocalDate.parse(myDate, DateTimeFormatter.BASIC_ISO_DATE); 
OffsetDateTime myOffsetDate = myLocalDate.atTime(OffsetTime.now(ZoneOffset.UTC)); 

System.out.println(myOffsetDate); //2016-07-08T14:58:23.170Z 
+0

、あなただけの出力 'T00に必要:00:00.000Z'? – Alexey

+0

私も日付を出力しようとしています。 – Jon

+0

私はすでにそれを考え出した) – Alexey

答えて

6

「現在の時間を使いたい」とは言えません。それは、これがやっているものです。

OffsetTime.now(ZoneOffset.UTC) 

あなただけのゼロオフセットと真夜中を提供することにより、LocalDateからOffsetDateTimeをしたい場合は、あなたが使用することができます。

OffsetDateTime myOffsetDate = myLocalDate 
    .atTime(LocalTime.MIDNIGHT) 
    .atOffset(ZoneOffset.UTC); 

それとも好む場合:

OffsetDateTime myOffsetDate = myLocalDate 
    .atTime(OffsetTime.of(LocalTime.MIDNIGHT, ZoneOffset.UTC)); 

(個人的に私は自分自身の最初のバージョンを好む...)

それはちょうどあなたに右OffsetDateTimeを得ています。あなたはミリ秒と秒でそれをフォーマットしたい場合は、その明示的に行う必要があります:

DateTimeFormatter formatter = DateTimeFormatter 
    .ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSX"); 
System.out.println(myOffsetDate.format(formatter)); 

コメントで述べたように、あなたがOffsetDateTimeの代わりにZonedDateTimeを見つけている場合、あなたは

を使用することができます
ZonedDateTime myOffsetDate = myLocalDate.atStartOfDay(ZoneOffset.UTC); 
+1

@assylias:True - それが追加されます。 –

+0

ありがとうございました! – Jon

+0

フォーマットされた文字列をOffsetDateTimeに変換しようとすると秒数とミリ秒を保持する方法はありますか?それは、OffsetDateTime.parse(formattedString)のように書く秒とミリ秒を除外しているようだ。 – Jon

0

LocalDateを使用して指定された文字列でISO_INSTANCEの日付形式を取得できるかどうかは不明です。しかし、あなたは必要な形式を得るためにコードのJava 8個以下を使用することができます。

public String getISO_8601DateFormat(String yyyyMMdd){ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
    String requiredFormat = null; 
    try { 
     Date inputDate = sdf.parse(yyyyMMdd); 
     long dateLongRepresentation = inputDate.getTime(); 
     long myTimeZoneOffset = TimeZone.getTimeZone(ZoneId.systemDefault()).getOffset(inputDate.getTime()); 
     Instant instance = Instant.ofEpochMilli(dateLongRepresentation + myTimeZoneOffset); 
     requiredFormat = instance.toString(); 

    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 

    return requiredFormat; 
} 

あなたは時間を必要としない意味のJavaでコーディングをお楽しみください:)

+2

良い解決策ではありません。古い日付/時刻クラス( 'Date'、' SimpleDateFormat')とそれらの置き換えであるjava.timeクラスを混在させています。古いクラスはあまり設計されておらず、混乱し、面倒で、解像度が低くなります(ミリ秒かナノ秒か)。古いクラスは避けてください。 Jon Skeet著[正解](http://stackoverflow.com/a/38270241/642706)を参照してください。また、java.timeソリューションを求める質問のタグも書き留めておいてください。 –

+0

はい、私は同意します.Jon Skeetのソリューションははるかにクリーンです(私は非常に悪いコーダーです:() –

+1

いいえ、悪いコーダーではありません。Javaにはクラスのライブラリがたくさんあります。古い日時クラスのJavaDocを徹底的に読んだら、「代わりにjava.timeを使う」と言うことを試みます。 –

関連する問題