乔达时间plusDays错误的日期

帕维尔·波利(Pavel Poley):

我正在使用此代码:

 DateTime(date)//Thu Aug 06 00:00:00 GMT+03:00 2020
                .plusDays(days) // 103
                .toDate()

结果是Fri Dec 18 23:00:00 GMT+02:00 2020而不是Dec 19对于某些日期,它可以很好地工作,而对于其他日期,其结果是date-1,我想问题出在一个月中的天数,但不plusDays()考虑吗?

Arvind Kumar Avinash:

对于某些日期,它工作得很好,而对于其他日期,结果是date-1,我想问题出在一个月中的天数,但是plusDays()是否不考虑呢?

它确实考虑了。您提到的两个日期时间字符串的问题在于它们属于不同的Zone-Offset(第一个是UTC + 3,第二个是UTC + 2)。下面给出的是如何在相同的区域偏移量下执行此操作。

import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        DateTimeFormatter formatter = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss zZ yyyy");
        DateTime dateTime = DateTime.parse("Thu Aug 06 00:00:00 GMT+03:00 2020", formatter);
        System.out.println(dateTime);
        // With Zone-Offset of UTC+2
        System.out.println(dateTime.withZone(DateTimeZone.forOffsetHours(2)));

        // Add 103 days
        DateTime dateTimeAfter103Days = dateTime.plusDays(103);
        System.out.println(dateTimeAfter103Days);
        System.out.println(dateTime.withZone(DateTimeZone.forOffsetHours(2)));
    }
}

输出:

2020-08-05T21:00:00.000Z
2020-08-05T23:00:00.000+02:00
2020-11-16T21:00:00.000Z
2020-08-05T23:00:00.000+02:00

我建议您使用现代的 java.time日期时间API和相应的格式API(包java.time.format)。Trail:Date Time了解更多有关现代日期时间API的信息如果您的Android API级别仍不符合Java8,请检查如何在Android Project中使用ThreeTenABP可通过desugaring获得的Java 8+ API

下表概述了现代日期时间类在此处输入图片说明

使用现代的日期时间API:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Define formatter for your date-time string
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss O u");

        // Parse the given date0-time string into OffsetDateTime object
        OffsetDateTime dateTime = OffsetDateTime.parse("Thu Aug 06 00:00:00 GMT+03:00 2020", formatter);
        System.out.println(dateTime);

        // Add 103 days to the OffsetDateTime object
        OffsetDateTime dateTimeAfter103Days = dateTime.plusDays(103);
        System.out.println(dateTimeAfter103Days);
    }
}

输出:

2020-08-06T00:00+03:00
2020-11-17T00:00+03:00

或者,

import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class Main {
    public static void main(String[] args) {
        // Define formatter for your date-time string
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy");

        // If you do not need Zone Id or Zone Offset information, you can go for
        // LocalDateTime
        LocalDateTime dateTime = LocalDateTime.parse("Thu Aug 06 00:00:00 GMT+03:00 2020", formatter);
        System.out.println(dateTime);

        // You can convert LocalDateTime object into an OffsetDateTime by applying the
        // Zone-Offset e.g. the following line applies UTC+03:00 hours to LocalDateTime
        OffsetDateTime odt = dateTime.atOffset(ZoneOffset.ofHours(3));
        System.out.println(odt);

        // Add 103 days to the LocalDateTime object
        LocalDateTime dateTimeAfter103Days = dateTime.plusDays(103);
        System.out.println(dateTimeAfter103Days);

        odt = dateTimeAfter103Days.atOffset(ZoneOffset.ofHours(3));
        System.out.println(odt);
    }
}

输出:

2020-08-06T00:00
2020-08-06T00:00+03:00
2020-11-17T00:00
2020-11-17T00:00+03:00

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自分类Java

Java日期验证乔达时间

来自分类Java

乔达时间给出了错误的时区

来自分类Dev

Android转换日期时间解析错误(甚至尝试过乔达时间)

来自分类Java

添加乔达时间

来自分类Java

乔达时间中的包含日期范围检查

来自分类Java

从星期几中获取乔达时间的日期名称

来自分类Java

在跳过假期+乔达时间的同时计算结束日期

来自分类Java

乔达时间-两个日期之间的月份差

来自分类Java

如何使用乔达时间在Java中将字符串转换为日期时间

来自分类Java

乔达时间-两个日期之间的所有星期一

来自分类Java

冬眠4和乔达时间

来自分类Java

乔达(Joda)时间,以毫秒为单位

来自分类Java

乔达时间-重复/每周间隔

来自分类Dev

乔达时间,解析不工作

来自分类Java

计算1918-03-24之后的天数时,乔达(Joda)时间一一错误

来自分类Java

乔达时间新的datetime()VS DateTime.now()

来自分类Java

乔达时间和Java8时差

来自分类Java

乔达时间即时转换成Java的时刻

来自分类Java

乔达日期时间vs即时

来自分类Dev

使用clj-time将Clojure #inst时间转换为乔达时间

来自分类Java

我如何能乔达的时间转换为java.time.Duration?

来自分类Java

乔达时间:无效的格式。数据格式不正确

来自分类Dev

克洛瑞尔(Clojure)乔达(Joda)时间的自定义过境作家

来自分类Java

乔达时间:DateTimeComparator。Java 8 Time Api有何相似之处?

来自分类Java

2014/2015年度突破的乔达时间减周()和加周()?

来自分类Java

乔达时间:一周的第一天?

来自分类Java

乔达时间的DateTime转换为java.util.Date奇怪的问题

来自分类Android

如何找到在地图中查看最近的乔达日期时间?

来自分类Java

如何减去两个乔达日期时间?

TOP 榜单

热门标签

归档