私は2つの文字列を持っています
- 2012-06-25 15:02:22.948
- +0530
最初の文字列の時刻に5:30を追加する新しい文字列が必要です。
両方の文字列を日付オブジェクトに変換してから追加することで、これを実行できると思いました。しかし、私が使用するときのように、私はそれを行う方法を知りません
yyyy MM dd hh:mm:ssを最初の文字列の日付形式として使用すると、エラーが発生します。
ありがとう!
文字列の形式はそうで2012-06-25 15:02:22.948
はないyyyy MM dd hh:mm:ss
ので、「エラー」が発生するのは当然です(エラーは何ですか?具体的であればあるほど、より良い人々があなたを助けることができます!)。
試してみてくださいyyyy-MM-dd HH:mm:ss.SSS
。フォーマット文字列の正確な構文を理解するには、のAPIドキュメントをSimpleDateFormat
参照してください。
注:フォーマット文字列では、大文字と小文字が重要です。hh
12時間制をHH
意味し、24時間制を意味します。を使用すると、時間のhh
解析15
は機能しません。SSS
また、フォーマット文字列にミリ秒を含めませんでした。
文字列String1+string2の両方をマージし、formatを使用yyyy-MM-dd HH:mm:ss.SSSZ
して日付を解析できます。あなたはここでより多くの文書を見ることができます
日付形式の文字列が間違っているため、例外が発生します。フォームに日付文字列を入力します
"yyyy-MM-dd hh:mm:ss.S"
SimpleDateFormatjavadocを参照してください
これを試して:
DateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS");
Date date = format.parse("2012-06-25 15:02:22.948");
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(date.getTime());
int time = Integer.parseInt("0530");
int hour = time / 100;
int minute = time % 100;
calendar.add(Calendar.HOUR_OF_DAY, hour);
calendar.add(Calendar.MINUTE, minute);
String newDateInString = format.format(calendar.getTime());
他の答えは正しいですが時代遅れです。
初期のバージョンのJavaにバンドルされていた古い日時クラス(java.util.Date/.Calendarなど)は現在、レガシーです。
これらの古いクラスは、 java.timeパッケージに取って代わられました。Oracleチュートリアルを参照してください。機能の多くは、 ThreeTenのJava 6および7にバックポートされています-バックポート、さらにThreeTenABPのAndroidに適応されています。
LocalDateTime
このLocalDateTime
クラスは、タイムゾーンのない日時を表します。最初のピースにそれらを使用します。
あなたのフォーマットは標準のISO8601フォーマットに近いです。スペースを。に置き換えるだけT
です。
String input = "2012-06-25 15:02:22.948";
String inputStandardized = input.replace( " " , "T" );
LocalDateTime ldt = LocalDateTime.parse( inputStandardized );
もう1つは、UTCからのオフセットです。ZoneOffset
このためにクラスを使用します。
ZoneOffset offset = ZoneOffset.of( "+0530" );
オフセットまたはタイムゾーンLocalDateTime
がない場合、これはタイムライン上の実際の瞬間ではなく、考えられる瞬間についての大まかなアイデアです。次に、UTCからのオフセットを追加して、OffsetDateTime
クラスで表される実際の瞬間をマークします。
OffsetDateTime odt = OffsetDateTime.of( ldt , offset );
タイムゾーンは、夏時間(DST)などの異常を処理するためのオフセットとルールです。単なるオフセットよりもタイムゾーンを使用する方がよいでしょう。
たとえば、このデータのコンテキストがインドの時間であるAsia/Kolkata
ことがわかっている場合は、を取得するなどのタイムゾーンを使用しZonedDateTime
ます。
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdt = odt.atZoneSameInstant( zoneId );