joda time todate()错误结果

zdwk9cvp  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(554)

我正在使用此代码: 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` 这个怎么了?
ve7v8dk2

ve7v8dk21#

您没有转换 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提供的java8+api。
下表显示了现代日期时间类的概述:

相关问题