私はこのコードを使用しています:
date
- DatePicker
文字列としてのからの日付オブジェクトThu Sep 10 00:00:00 GMT+03:00 2020
mDate = DateTime(date)
.withHourOfDay(0)
.withMinuteOfHour(0)
.withSecondOfMinute(0)
.withMillisOfSecond(0)
.toDate()
結果mDate
-Wed Sep 09 03:00:00 GMT+03:00 2020
これはどうしたの?
DateTime
オブジェクトをjava.util.Date
正しく変換していません。正しい方法は、DateTime
オブジェクトからミリ秒を取得し、ミリ秒でを初期化することjava.util.Date
です。
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
// Define formatter
DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zZ yyyy");
// Date-time string from DatePicker
String strDateTime = "Thu Sep 10 00:00:00 GMT+03:00 2020";
DateTime dateTime = DateTime.parse(strDateTime, formatter);
System.out.println(dateTime);
// No. of milliseconds from the epoch of 1970-01-01T00:00:00Z
long millis = dateTime.getMillis();
System.out.println(millis);
Date mDate = new Date(millis);
// Display java.util.Date object in my default time-zone (BST)
System.out.println(mDate);
//Display java.util.Date in a different time-zone and using custom format
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+3"));
System.out.println(sdf.format(mDate));
}
}
出力:
2020-09-09T21:00:00.000Z
1599685200000
Wed Sep 09 22:00:00 BST 2020
Thu Sep 10 00:00:00 GMT+03:00 2020
注: java.util.Date
は日付/時刻オブジェクトを表しません。それは単にノーを表します。のエポックからミリ秒単位1970-01-01T00:00:00Z
。タイムゾーンまたはゾーンオフセット情報はありません。印刷すると、JavaはJVMのタイムゾーンを適用して得られた文字列を印刷します。他のタイムゾーンで印刷する場合はSimpleDateFormat
、上記のようにを使用して印刷できます。
古くてエラーが発生しやすいjava.util
日時API SimpleDateFormat
から、最新の java.time
日時APIおよび対応するフォーマットAPI(パッケージ、java.time.format
)に切り替えることをお勧めします。Trail:Date Timeの最新の日時APIについて詳しく学んでください。それでもAndroid APIレベルがJava8に準拠していない場合は、「Android プロジェクトでThreeTenABPを使用する方法」および「desugaringを通じて利用可能なJava 8+ API 」を確認してください。
次の表は、最新の日時クラスの概要を示しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加