joda-time的使用
值得一提的是该功能被整合到Java 8 中 ,被称为java8 新特新之一 。这意味着不用到包
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
不过下面的代码写的更清楚一点
来自:http://ylq365.iteye.com/blog/1769680
joda-time的使用
博客分类:
Joda-Time
Home:http://joda-time.sourceforge.net/
JavaDoc:http://joda-time.sourceforge.net/apidocs/index.html
直接看代码,这是在网上和根据API整理的一些例子,使用时看例子就可以了
package com.yan.joda; import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter; public class JodaTest { public static void main(String[] args) {
//初始化时间
DateTime dateTime=new DateTime(, , , , ,); // 年,月,日,时,分,秒,毫秒
DateTime dt3 = new DateTime(, , , , , , );// 2010年2月13日10点30分50秒333毫秒 //下面就是按照一点的格式输出时间
String str2 = dateTime.toString("MM/dd/yyyy hh:mm:ss.SSSa");
String str3 = dateTime.toString("dd-MM-yyyy HH:mm:ss");
String str4 = dateTime.toString("EEEE dd MMMM, yyyy HH:mm:ssa");
String str5 = dateTime.toString("MM/dd/yyyy HH:mm ZZZZ");
String str6 = dateTime.toString("MM/dd/yyyy HH:mm Z"); DateTimeFormatter format = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
//时间解析
DateTime dateTime2 = DateTime.parse("2012-12-21 23:22:45", format); //时间格式化,输出==> 2012/12/21 23:22:45 Fri
String string_u = dateTime2.toString("yyyy/MM/dd HH:mm:ss EE");
System.out.println(string_u); //格式化带Locale,输出==> 2012年12月21日 23:22:45 星期五
String string_c = dateTime2.toString("yyyy年MM月dd日 HH:mm:ss EE",Locale.CHINESE);
System.out.println(string_c); DateTime dt1 = new DateTime();// 取得当前时间 // 根据指定格式,将时间字符串转换成DateTime对象,这里的格式和上面的输出格式是一样的
DateTime dt2 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss").parseDateTime("2012-12-26 03:27:39"); //计算两个日期间隔的天数
LocalDate start=new LocalDate(, ,);
LocalDate end=new LocalDate(, , );
int days = Days.daysBetween(start, end).getDays(); //计算两个日期间隔的小时数,分钟数,秒数 //增加日期
DateTime dateTime1 = DateTime.parse("2012-12-03");
dateTime1 = dateTime1.plusDays();
dateTime1 = dateTime1.plusHours();
dateTime1 = dateTime1.plusMinutes();
dateTime1 = dateTime1.plusMonths();
dateTime1 = dateTime1.plusSeconds();
dateTime1 = dateTime1.plusWeeks();
dateTime1 = dateTime1.plusYears(); // Joda-time 各种操作.....
dateTime = dateTime.plusDays() // 增加天
.plusYears()// 增加年
.plusMonths()// 增加月
.plusWeeks()// 增加星期
.minusMillis()// 减分钟
.minusHours()// 减小时
.minusSeconds();// 减秒数 //判断是否闰月
DateTime dt4 = new DateTime();
org.joda.time.DateTime.Property month = dt4.monthOfYear();
System.out.println("是否闰月:" + month.isLeap()); //取得 3秒前的时间
DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-);
dateTime1.getSecondOfMinute();// 得到整分钟后,过的秒钟数
dateTime1.getSecondOfDay();// 得到整天后,过的秒钟数
dateTime1.secondOfMinute();// 得到分钟对象,例如做闰年判断等使用 // DateTime与java.util.Date对象,当前系统TimeMillis转换
DateTime dt6 = new DateTime(new Date());
Date date = dateTime1.toDate();
DateTime dt7 = new DateTime(System.currentTimeMillis());
dateTime1.getMillis(); Calendar calendar = Calendar.getInstance();
dateTime = new DateTime(calendar);
}
} 下面是一个小例子用来计算小宝宝从出生到现在总共的天数小时数等,首先用jdk的类去做,不用joda,然后再用joda去做,以做比较 用jdk做的例子,这里算的从出生到现在的时间间隔是准确的,如果是输入的某天来算的话就不是很准确,多一秒就算一天。可以看到用jdk去做的话,要写的代码还是挺繁琐的。
Java代码 收藏代码 import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner; public class CalBaby {
private final static String birthday = "2012-3-10 08:20:55";
/**
* @param args
*/
public static void main(String[] args) {
while(true){
String format1 = "yyyy-MM-dd";
String format2 = "yyyy-MM-dd HH:mm:ss";
Scanner s = new Scanner(System.in);
System.out.println("########################################");
cutTwoDateToDay(convertToDate1(birthday,format2),new Date(),false);
System.out.println("请选择操作");
System.out.println("请输入日期(格式例如:2012-11-08)");
System.out.println("########################################");
String endDateStr = s.nextLine();
Date endDate = convertToDate1(endDateStr,format1);
if(endDate == null){
System.out.println("输入格式错误!请重新输入.");
continue;
}
boolean inputFlag = true;
cutTwoDateToDay(convertToDate1(birthday,format2),endDate,inputFlag);
} } /**
* 计算两个日期之间的差距天数
*
* @param a
* @param b
* @return
*/
public static void cutTwoDateToDay(Date beginDate, Date endDate,boolean inputFlag) {
Calendar calendar = Calendar.getInstance();
long intervalDays = ;
calendar.setTime(beginDate);
long begin = calendar.getTimeInMillis();
calendar.setTime(endDate);
long end = calendar.getTimeInMillis();
long totalM = end - begin;
System.out.println((end -begin));
System.out.println(***);
intervalDays = totalM /(***);
long intervalHours = (totalM - (intervalDays****))/(**);
long intervalMin = (totalM - intervalDays * (***) - intervalHours***)/(*);
if(inputFlag){
if(totalM > 0L && totalM %(***) > 0L){
intervalDays = intervalDays + ;
}
System.out.println("宝宝从出生到"+formatDate(endDate,"yyyy-MM-dd")+"已经"+intervalDays+"天了");
}else{
System.out.println("宝宝来到这个世界已经"+intervalDays+"天"+intervalHours+"小时"+intervalMin+"分钟了");
} } /**
* 将字符串日期转换为Date yyyy-MM-dd HH:mm:ss yyyy-MM-dd
*
* @param s
* @return
*/
public static Date convertToDate1(String s,String format) { if (s == null) {
return null;
}
try {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.parse(s);
} catch (Exception e) {
return null;
}
} public static String formatDate(Date date, String strType)
{
if (date == null)
{
return null;
} SimpleDateFormat sdf = new SimpleDateFormat(strType);
try
{
return sdf.format(date);
}
catch (Exception e)
{
return null;
}
}
}
下面是用joda来做,用这个来做就简单的多了,而且也很准确。
import java.util.Scanner;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter; public class CalBabyJoda { private final static String birthday = "2012-3-10 08:20:55"; public static void main(String[] args) {
while(true){
Scanner s = new Scanner(System.in);
System.out.println("########################################");
DateTimeFormatter format1 = DateTimeFormat .forPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter format2 = DateTimeFormat .forPattern("yyyy-MM-dd");
DateTime startDateTime = DateTime.parse(birthday, format1);
System.out.println("宝宝来到这个世界已经");
calDateToDay(startDateTime,new DateTime());
System.out.println("如选择其它日期请输入(格式例如:2012-11-08 14:24:54或着2012-11-08)");
System.out.println("########################################");
String endDate = s.nextLine();
DateTime endDateTime = null;
try{
endDateTime = DateTime.parse(endDate,format1);
}catch(Exception e){
try{
endDateTime = DateTime.parse(endDate,format2);
}catch(Exception e1){
System.out.println("输入格式错误!请重新输入.");
continue;
}
}
System.out.println("宝宝从出生到" + endDateTime.toString("yyyy-MM-dd HH:mm:ss") + "已经");
calDateToDay(startDateTime,endDateTime);
}
} public static void calDateToDay(DateTime startDateTime,DateTime endDateTime){ LocalDate start=new LocalDate(startDateTime);
LocalDate end=new LocalDate(endDateTime);
Days days = Days.daysBetween(start, end);
int intervalDays = days.getDays();
int intervalHours = endDateTime.getHourOfDay() - startDateTime.getHourOfDay();
int intervalMinutes = endDateTime.getMinuteOfHour() - startDateTime.getMinuteOfHour();
int intervalSeconds = endDateTime.getSecondOfMinute() - startDateTime.getSecondOfMinute(); if(intervalSeconds < ){
intervalMinutes = intervalMinutes -;
intervalSeconds = + intervalSeconds;
} if(intervalMinutes < ){
intervalHours = intervalHours -;
intervalMinutes = + intervalMinutes;
} if(intervalHours < ){
intervalDays = intervalDays -;
intervalHours = + intervalHours;
} System.out.println(intervalDays + "天" + intervalHours +
"小时" + intervalMinutes + "分钟" + intervalSeconds + "秒");
System.out.println("############################");
} }
joda-time的使用的更多相关文章
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- joda jar日期处理类的学习
转载:http://www.open-open.com/lib/view/open1348032952724.html 任何企业应用程序都需要处理时间问题.应用程序需要知道当前的时间点和下一个时间点, ...
- Scala - 处理时间(nscala-time - Joda Time的scala封装)
GITHUB : https://github.com/nscala-time/nscala-time MAVEN : (注意选对scala版本) <dependency> <gro ...
- 解决java.lang.NoSuchMethodError:org.joda.time.DateTime.withTimeAtStartOfDay() Lorg/joda/time/DateTime
问题:项目放在weblogic运行,报错 java.lang.NoSuchMethodError: org.joda.time.DateTime.withTimeAtStartOfDay()Lorg/ ...
- org.joda.time.DateTime 日期格式
最近一直在使用Java,偶尔一次遇到日期(util)的格式转换,心里还是规矩的写着记忆里面的代码,但是在自己测试的时候发现不正确,具体看了下代码,发现这里使用jota的方式编写,顺道查了一下,做了笔记 ...
- joda time, jackson 与 scala 反射
1. scala 反射,获得所有 field name 可以直接从 case class 获得 field 而不必创建实例 (get fields of a class without an inst ...
- Java-小技巧-004-jdk时间,jdk8时间,joda,calendar,获取当前时间前一周、前一月、前一年的时间
1.推荐使用java8 localdate等 线程安全 支持较好 地址 2.joda 一.简述 查看SampleDateFormat源码,叙述有: * Date formats are not syn ...
- 抛java.lang.NoClassDefFoundError: org.joda.time.ReadablePeriod错误
转自:http://www.codeorg.cn/article/detail/qa/542 在进行activiti环境搭建时总是抛出java.lang.NoClassDefFoundError: o ...
- [原创]Spring Boot + Mybatis 简易使用指南(二)多参数方法支持 与 Joda DateTime类型支持
前言 今天在开发练习项目时遇到两个mybatis使用问题 第一个问题是mapper方法参数问题,在参数大于一个时,mybatis不会自动识别参数命名 第二个问题是Pojo中使用Joda DateTim ...
- Joda Time 使用
Joda Time 使用 对于系统的一些时间操作很是不方便,为了方便转化,有时候用date,有时候用timestmp,有时候用calendar,忍不住想更改了. 但是任务巨大,先把笔记收藏了,后面有机 ...
随机推荐
- 10046event vs 10053event做了哪些操作
10046 event 告诉我们oracle做了哪些事情,做的怎么样.10053 event 告诉我们oracle优化器怎么想的,再给出成本最低的最终的优化方案,考虑了哪些执行计划拿了哪些统计信息
- 穷举算法和递推算法(Java)
穷举算法 概念: 最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况.穷举算法效率不高,但是适合一些没有明显规律可循的场合. 思想: 在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范 ...
- self-taught learning setting && semi-supervised learning
参考文献: 摘于上文献: The more general and powerful setting is the self-taught learning setting, which does n ...
- MFGTool2批量操作
/********************************************************************************* * MFGTool2批量操作 * ...
- java MessageFormat.format 用法
FormatElement: { ArgumentIndex }:是从0开始的入参位置索引. { ArgumentIndex , FormatType } { ArgumentIndex , Form ...
- BZOJ2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1678 Solved: 849[Submit][Status][D ...
- BZOJ4978: [Lydsy1708月赛]泛化物品(乱搞)
4978: [Lydsy1708月赛]泛化物品 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 220 Solved: 70[Submit][Statu ...
- 如何搭建Spring MVC 框架---Hello World
传送门 现在的Web框架基本都采用了MVC(model-view-Controller)设计模式,其中,Servlet和Filter都可以充当控制器.Spring MVC采用一个Servlet作为控制 ...
- streamsets Executors 说明
执行程序阶段在收到事件时触发任务.执行者不会写入或存储事件. 将执行程序用作事件流中数据流触发器的一部分,以执行事件驱动的与管道相关的任务,例如在目标关闭时移动完全写入的文件. 可以使用的execut ...
- hasura graphql schema 导出
使用的是apollo 的插件 安装apollo npm install -g apollo 基本使用 因为我使用了模式拼接,所以地址有变动,一般是 http://host:port/v1alpha1/ ...