首页 > 其他分享 >Joda-Time

Joda-Time

时间:2023-10-10 15:13:07浏览次数:32  
标签:Joda int DateTime Time Date new Calendar dateTime

https://github.com/JodaOrg/joda-time

依赖引入

①Maven

<dependency>
   <groupId>joda-time</groupId>
   <artifactId>joda-time</artifactId>
   <version>2.12.5</version>
</dependency>

②Gradle

compile 'joda-time:joda-time:2.9.9'

核心类

DateTime : 用于代替 JDK 的 Calendar 日历类

DateTime dateTime = new DateTime();
DateTime dateTime = new DateTime(2023, 10, 01, 00, 00, 01, DateTimeZone.UTC);

Instant : 用于表示时间轴上一个瞬间(时间戳)

LocalDate : 用于表示一个本地的日期,不包含时间及时区信息

LocalTime : 用于表示一个本地的时间,不包含日期及时区信息

LocalDateTime : 用于表示一个本地的日期时间,不包含时区信息

DateTime 实例化

①系统时间构造

DateTime dateTime = new DateTime();

②具体时间构造

public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour)
public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, DateTimeZone zone)
public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute)
public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, DateTimeZone zone)
public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond)
public DateTime(int year, int monthOfYear, int dayOfMonth, int hourOfDay, int minuteOfHour, int secondOfMinute, int millisOfSecond, DateTimeZone zone)

③使用 Calendar 构造

DateTime dateTime = new DateTime(Calendar.getInstance);

④使用其他 DateTime 实例构造

DateTime dateTime = new DateTime(dateTime);

⑤使用字符串构造

DateTime dateTime = new DateTime("2023-01-01T23:59:59-06:00");

DateTime 使用

每次调用方法返回 DateTime 实例时,都会调用 DateTime 的 withMills() 方法判断时间是否发生变化,如果发生变化就会创建一个新实例返回

// 指定时间单位上计算
DateTime dateTime = dateTime.plusDays(1); // 加一天
DateTime dateTime = dateTime.minusMonths(1); // 减一个月
DateTime dateTime = dateTime.withYear(2023); // 指定年份
dateTime.toString("E MM/dd/yyyy HH:mm:ss.SSS"); // 按照格式输出

通过一些方法可以获取到 DateTime 实例的一个 Property 实例,调用 Property 的方法可以再获取一个 DateTime 实例,一般用于对指定的时间位置进行修改

// 先获取一个Property实例,示例中获取的是天的实例,调用withMaximumValue方法将天变成当月最大的一天,再返回一个DateTime实例
DateTime dateTime = dateTime.dayOfMonth().withMaximumValue();

一些静态方法

Days.daysBetween(dateTime1, dateTime2).getDays();
Months.monthsBetween(dateTime1, dateTime2).getDays();
Years.yearsBetween(dateTime1, dateTime2).getDayds();

日期格式化

JDK : SimpleDateFormat 线程不安全,并发环境必须进行同步处理(synchronized / ThreadLocal)

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);

Joda-Time : DateTimeFormatter 线程安全

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr = dtf.print(dateTime);

将字符串转换为日期类型

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTime dateTime = dtf.parseDateTime(dateStr)

日期计算

JDK 获取 40 天前日期 : 借助 Calendar 日历类

Date today = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(today);
calendar.add(Calendar.DAT_OF_MONTH, -40);
Date beforeDay = calendar.getTime();

Joda-Time 中 DateTime 自带计算功能

DateTime today = new DateTime();
DateTime beforDay = today.minusDays(40);

计算两个日期相差天数

// JDK
int diffDays = (int) ((today.getTime() - beforeDay.getTime()) / (24 * 40 * 60 * 1000));
// Joda-Time
int diffDays = Days.daysBetween(yesterday, today).getDays();
int diffMonths = Months.monthsBetween(yesterday, oday).getMonths();

与 JDK 日期相互转换

// Date → DateTime
DateTime dateTime = new DateTime(date);
// DateTime → Date
Date date = dateTime.toDate();
// Calendar → DateTime
DateTime dateTime = new DateTime(calendar);
// DateTime → Calendar
Calendar calendar = dateTime.toCalendar(Locale.CHINA);

 

标签:Joda,int,DateTime,Time,Date,new,Calendar,dateTime
From: https://www.cnblogs.com/anglecito/p/17754442.html

相关文章

  • Math、System、Runtime //BigDecimal、Date、SimpleDaateFormat、Calendar
    1、Math =======================================================================================BigDecimal 1、构造器publicBigDecimal(Stringval)publicclassBigDecimalDemo01{publicstaticvoidmain(String[]args){//目标:掌握BigDecimal的......
  • QT常用控件之QTimer,QDialog,QLabel,QLineEdit,QProgressBar,QComboBox,QPushButton,QGridLay
    QT常用控件的组合#ifndefPROGRESSBARWIDGET_H#definePROGRESSBARWIDGET_H#include<QWidget>#include<QTimer>#include<QDialog>#include<QLabel>#include<QLineEdit>#include<QProgressBar>//显示进度条的控件#include<QComboBo......
  • Date与LocalDateTime转换
    在Java中,可以使用java.util.Date和java.time.LocalDateTime类来表示日期和时间。如果需要将Date转换为LocalDateTime,可以使用toInstant()方法将Date转换为Instant,然后再使用atZone()方法将其转换为ZoneId,最后使用toLocalDateTime()方法将其转换为LocalDateTime。示例如下:Datedat......
  • 2023-02-28-如何避免timemachine占用宝贵的mac磁盘空间
    +++title="如何避免timemachine占用宝贵的mac磁盘空间"description=""date=2023-02-28T16:47:50+08:00comment=truetoc=truereward=truecategories=[""]tags=[""]series=[]images=[]+++因为我买的MacBook只有512G的容量......
  • 2023-02-06Fix dual system time problem copy
    +++title="Fixdualsystemtimeproblem"description=""date=2023-02-06T14:21:50+08:00featured=falsecomment=truetoc=truereward=truecategories=[""]tags=["ubuntu"]series=[]images=[]+......
  • MAC Office 插件异常 Run-time error '53'
    问题描述:Office版本和Mathtype版本不兼容,卸载mathtype后,加载项无法加载出现如下报错:Filenotfound:/Library/ApplicationSupport/Microsoft/Office365/UserContent.localized/Startup.localized/PowerPoint/MathType.bundle/Contents/MacOS/MTMacOLEshim.解决方法问题处在......
  • RuntimeError: dictionary changed size during iteration
    RuntimeError:dictionarychangedsizeduringiteration解决办法-CSDN博客字典遍历时,不允许修改修改前forkeyinsys.modules.keys():ifkey.startswith('selenium'):delsys.modules[key]改成listforkeyinlist(sys.modules.keys())......
  • Python 时间_Datetime_Module
    Datetime_Module作用:处理日期和时间一、Datetime模块中的类datetime:表示日期和时间,可以处理年、月、日、时、分、秒。date:表示日期,主要用于处理年、月、日。time:表示时间,主要用于处理时、分、秒。timedelta:表示时间间隔,即两个时间点的间隔,主要用于做时间加减。tzinfo:时区......
  • Direct Component/SEDA Component/VM Component/Timer Component/Log Component/Cache
    http://camel.apache.org/direct.htmlDirectComponentThedirect:componentprovidesdirect,synchronousinvocationofanyconsumerswhenaproducersendsamessageexchange.Thisendpointcanbeusedtoconnectexistingroutesinthesamecamelcontext.Asy......
  • Localdatetime 8 全局配置
    @ConfigurationpublicclassLocalDateTimeSerializerConfig{privatestaticfinalDateTimeFormatterDATE_TIME_FORMATTER=DateTimeFormatter.ofPattern("yyyy-MM-ddHH:mm:ss");privatestaticfinalDateTimeFormatterDATE_FORMATTER=DateTimeFor......