java计算相隔时间差以及Joda-Time

2024-04-15 18:58

本文主要是介绍java计算相隔时间差以及Joda-Time,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.java获取一天以后的时间

		DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");try{Date d1 = df.parse(start);System.out.println("秒数:"+d1.getTime());  //Date类型的getTime()返回毫秒数Date dt = new Date(d1.getTime()+1000 * 60 * 60 * 24);String d11 = df.format(dt);  //得到精确到秒的表示:08/31/2006 21:08:00System.out.println("相差24小时:"+d11);}catch(Exception e){}


2.java获取前一个月的时间

    public static void main(String[] args) {Calendar ca = Calendar.getInstance();// 得到一个Calendar的实例
//        ca.setTime(new Date()); // 设置时间为当前时间ca.set(2015, 10, 12);// 月份是从0开始的,所以11表示12月
//        ca.add(Calendar.YEAR, -1); // 年份减1
//        ca.add(Calendar.MONTH, -1);// 月份减1
//        ca.add(Calendar.DATE, -1);// 日期减1Date resultDate = ca.getTime(); // 结果SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");System.out.println(sdf.format(resultDate));}

结果:
2015-11-12

上面的两种方法有个弊端,第一种不知为什么相差毫秒时间间隔天数太长的时候,返回的时间是不对的,第二种方法,在跨年的时候,比如2015-12-10的时候,月份减一发的时候,年不会进行联动,就会变成2015-1-10(注意月份在实际使用的时候12月对应11),所以推荐第三种方法:

3.Joda-Time的使用:

 DateTime dt = new DateTime("2017-01-01");int year = dt.getYear();int month = dt.getMonthOfYear();int day = dt.getDayOfMonth();String newTime = year + "-" + month + "-" + 1;DateTime dateTime = new DateTime(newTime);DateTime before1month = dateTime.minusMonths(1);String s2 = before1month.toString("yyyy-MM-dd HH:mm:ss");System.out.println(s2);

结果:
2016-12-01

4.Joda-Time介绍

Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。

4.1 时间类得生成

//方法一:取系统点间  
DateTime dt1 = new DateTime();  //方法二:通过java.util.Date对象生成  
DateTime dt2 = new DateTime(new Date());  //方法三:指定年月日点分秒生成(参数依次是:年,月,日,时,分,秒,毫秒)  
DateTime dt3 = new DateTime(2012, 5, 20, 13, 14, 0, 0);  //方法四:ISO8601形式生成  
DateTime dt4 = new DateTime("2012-05-20");  
DateTime dt5 = new DateTime("2012-05-20T13:14:00");  //只需要年月日的时候  
LocalDate localDate = new LocalDate(2009, 9, 6);// September 6, 2009  //只需要时分秒毫秒的时候  
LocalTime localTime = new LocalTime(13, 30, 26, 0);// 1:30:26PM  

4.2 获取年月日点分秒

DateTime dt = new DateTime();  
//年  
int year = dt.getYear();  
//月  
int month = dt.getMonthOfYear();  
//日  
int day = dt.getDayOfMonth();  
//星期  
int week = dt.getDayOfWeek();  
//点  
int hour = dt.getHourOfDay();  
//分  
int min = dt.getMinuteOfHour();  
//秒  
int sec = dt.getSecondOfMinute();  
//毫秒  
int msec = dt.getMillisOfSecond();  

4.3 星期的特殊处理 

DateTime dt = new DateTime();  //星期  
switch(dt.getDayOfWeek()) {  
case DateTimeConstants.SUNDAY:  System.out.println("星期日");  break;  
case DateTimeConstants.MONDAY:  System.out.println("星期一");  break;  
case DateTimeConstants.TUESDAY:  System.out.println("星期二");  break;  
case DateTimeConstants.WEDNESDAY:  System.out.println("星期三");  break;  
case DateTimeConstants.THURSDAY:  System.out.println("星期四");  break;  
case DateTimeConstants.FRIDAY:  System.out.println("星期五");  break;  
case DateTimeConstants.SATURDAY:  System.out.println("星期六");  break;  
}  

4.4 与JDK日期对象的转换

DateTime dt = new DateTime();  //转换成java.util.Date对象  
Date d1 = new Date(dt.getMillis());  
Date d2 = dt.toDate();  //转换成java.util.Calendar对象  
Calendar c1 = Calendar.getInstance();  
c1.setTimeInMillis(dt.getMillis());  
Calendar c2 = dt.toCalendar(Locale.getDefault()); 

4.5 日期前后推算

DateTime dt = new DateTime();  //昨天  
DateTime yesterday = dt.minusDays(1);         
//明天  
DateTime tomorrow = dt.plusDays(1);       
//1个月前  
DateTime before1month = dt.minusMonths(1);        
//3个月后  
DateTime after3month = dt.plusMonths(3);          
//2年前  
DateTime before2year = dt.minusYears(2);          
//5年后  
DateTime after5year = dt.plusYears(5);  

4.6 取特殊日期

DateTime dt = new DateTime();     //月末日期    
DateTime lastday = dt.dayOfMonth().withMaximumValue();  //90天后那周的周一  
DateTime firstday = dt.plusDays(90).dayOfWeek().withMinimumValue(); 

4.7 时区

//默认设置为日本时间  
DateTimeZone.setDefault(DateTimeZone.forID("Asia/Tokyo"));  
DateTime dt1 = new DateTime();  //伦敦时间  
DateTime dt2 = new DateTime(DateTimeZone.forID("Europe/London"));  

4.8 计算区间

DateTime begin = new DateTime("2012-02-01");  
DateTime end = new DateTime("2012-05-01");  //计算区间毫秒数  
Duration d = new Duration(begin, end);  
long time = d.getMillis();  //计算区间天数  
Period p = new Period(begin, end, PeriodType.days());  
int days = p.getDays();  //计算特定日期是否在该区间内  
Interval i = new Interval(begin, end);  
boolean contained = i.contains(new DateTime("2012-03-01"));  

4.9 日期比较

DateTime d1 = new DateTime("2012-02-01");  
DateTime d2 = new DateTime("2012-05-01");  //和系统时间比  
boolean b1 = d1.isAfterNow();  
boolean b2 = d1.isBeforeNow();  
boolean b3 = d1.isEqualNow();  //和其他日期比  
boolean f1 = d1.isAfter(d2);  
boolean f2 = d1.isBefore(d2);  
boolean f3 = d1.isEqual(d2);  

4.10 格式化输出

DateTime dateTime = new DateTime();  String s1 = dateTime.toString("yyyy/MM/dd hh:mm:ss.SSSa");  
String s2 = dateTime.toString("yyyy-MM-dd HH:mm:ss");  
String s3 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");  
String s4 = dateTime.toString("yyyy/MM/dd HH:mm ZZZZ");  
String s5 = dateTime.toString("yyyy/MM/dd HH:mm Z");  





js日期格式转换



这篇关于java计算相隔时间差以及Joda-Time的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/906651

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

Java进阶13讲__第12讲_1/2

多线程、线程池 1.  线程概念 1.1  什么是线程 1.2  线程的好处 2.   创建线程的三种方式 注意事项 2.1  继承Thread类 2.1.1 认识  2.1.2  编码实现  package cn.hdc.oop10.Thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定