【java】之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(2012, 12, 13, 18, 23,55); // 年,月,日,时,分,秒,毫秒
DateTime dt3 = new DateTime(2011, 2, 13, 10, 30, 50, 333);// 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(2012, 12,14);
LocalDate end=new LocalDate(2013, 01, 15);
int days = Days.daysBetween(start, end).getDays(); //计算两个日期间隔的小时数,分钟数,秒数 //增加日期
DateTime dateTime1 = DateTime.parse("2012-12-03");
dateTime1 = dateTime1.plusDays(30);
dateTime1 = dateTime1.plusHours(3);
dateTime1 = dateTime1.plusMinutes(3);
dateTime1 = dateTime1.plusMonths(2);
dateTime1 = dateTime1.plusSeconds(4);
dateTime1 = dateTime1.plusWeeks(5);
dateTime1 = dateTime1.plusYears(3); // Joda-time 各种操作.....
dateTime = dateTime.plusDays(1) // 增加天
.plusYears(1)// 增加年
.plusMonths(1)// 增加月
.plusWeeks(1)// 增加星期
.minusMillis(1)// 减分钟
.minusHours(1)// 减小时
.minusSeconds(1);// 减秒数 //判断是否闰月
DateTime dt4 = new DateTime();
org.joda.time.DateTime.Property month = dt4.monthOfYear();
System.out.println("是否闰月:" + month.isLeap()); //取得 3秒前的时间
DateTime dt5 = dateTime1.secondOfMinute().addToCopy(-3);
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去做的话,要写的代码还是挺繁琐的。
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 = 0;
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(24*60*60*1000);
intervalDays = totalM /(24*60*60*1000);
long intervalHours = (totalM - (intervalDays*24*60*60*1000))/(60*60*1000);
long intervalMin = (totalM - intervalDays * (24*60*60*1000) - intervalHours*60*60*1000)/(60*1000);
if(inputFlag){
if(totalM > 0L && totalM %(24*60*60*1000) > 0L){
intervalDays = intervalDays + 1;
}
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 < 0){
intervalMinutes = intervalMinutes -1;
intervalSeconds = 60 + intervalSeconds;
} if(intervalMinutes < 0){
intervalHours = intervalHours -1;
intervalMinutes = 60 + intervalMinutes;
} if(intervalHours < 0){
intervalDays = intervalDays -1;
intervalHours = 24 + intervalHours;
} System.out.println(intervalDays + "天" + intervalHours +
"小时" + intervalMinutes + "分钟" + intervalSeconds + "秒");
System.out.println("############################");
} }
@文转http://ylq365.iteye.com/blog/1769680
参考
http://persevere.iteye.com/blog/1755237
http://rensanning.iteye.com/blog/1546652
【java】之joda-time的使用的更多相关文章
- Java下好用的开源库推荐
作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文想介绍下自己在Java下做开发使用到的一些开源的优秀编程库,会不定 ...
- logstash-2-插件配置
配置语法: Logstash必须有一个 input 和一个 output 1, 处理输入的input 1), 从文件录入 logstash使用一个名为 filewatch的 ruby gem库来监听 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- [Java]Java日期及时间库插件 -- Joda Time.
来到新公司工作也有一个多月了, 陆陆续续做了一些简单的项目. 今天做一个新东西的时候发现了 Joda Time的这个东西, 因为以前用的都是JDK原生的时间处理API, 大家都知道Java原生的时间处 ...
- 解决java.lang.NoSuchMethodError:org.joda.time.DateTime.withTimeAtStartOfDay() Lorg/joda/time/DateTime
问题:项目放在weblogic运行,报错 java.lang.NoSuchMethodError: org.joda.time.DateTime.withTimeAtStartOfDay()Lorg/ ...
- 抛java.lang.NoClassDefFoundError: org.joda.time.ReadablePeriod错误
转自:http://www.codeorg.cn/article/detail/qa/542 在进行activiti环境搭建时总是抛出java.lang.NoClassDefFoundError: o ...
- Java 8五大主要功能为开发者提供了哪些便利?
两年前当Java 8发布后,立即受到了业界的欢迎,因为它大大提高了Java的性能.它独特的卖点是,顾及了编程语言的每一个方面,包括JVM(Java虚拟机)和编译器,并且改良了其它帮助系统. Java是 ...
- [转载]Java 8 日期&时间 API
Java 8 日期和时间 声明 本文转自http://www.journaldev.com/2800/java-8-date-localdate-localdatetime-instant,以mark ...
- Java 查漏补缺
摘自<老马说编程> 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算 Java中不支持直接写二进制常量,比如,想写二进制形式的11001,Java中不能直接写,可以在前面补0,补 ...
- 详细解说Java Spring的JavaConfig注解 【抄】
抄自: http://www.techweb.com.cn/network/system/2016-01-05/2252188.shtml @RestController spring4为了更方便的支 ...
随机推荐
- 感知机的对偶形式——python3实现
运用对偶的(对应原始)感知机算法实现线性分类. 参考书目:<统计学习方法>(李航) 算法原理: 代码实现: 环境:win7 32bit + Anaconda3 +spyder 和原始算法的 ...
- Spring MVC之视图解析器和URL-Pattern的配置方案
上期讲解了第一入门案例之后接下来了解一下视图解析器与URL-Pattern的配置方案 先来说视图解析器,在上次博客文章中我们完成了入门案例,接下来我们就在上一个例子中完善一下体出视图解析器 <? ...
- jekins 持续集成手记
1.安装一个干净Ubuntu14.04桌面版本 2.打开http://jenkins-ci.org/ 官网, 选择use jenkins 中, Installing Jenkins on Ubuntu ...
- Linux标准出错重定向导出
~$ ls han >1.txt 2>&1
- linux 关机要点
主要围绕 sync shutdown reboot这几个指令 将数据同步写入硬盘中的挃令: sync:关机前要保存进硬盘.事实上sync也可以被一般账号使用喔!只丌过一般账号用户所更新的硬盘数据就仅有 ...
- 基于CSS的幻灯片工具 reveal.js
官网:http://lab.hakim.se/reveal-js/#/ github https://github.com/hakimel/reveal.js 更多资源:6个最好的 HTML5/CS ...
- TCP SYN扫描学习笔记
1.TCP SYN包扫描主机状态的原理:tcp协议规定,当目标主机收到一个tcp syn 包时,若目标主机处于开放状态,会返回给源主机一个tcp ack 包(目的端口开放),或者向源主机发送一个tcp ...
- U盘格式转换
有一次想把5G的文件拷到U盘里面,悲催的发现拷不进去,文件过大...... 硬盘格式:NTFS 把自己的U盘也改了格式后,就可以了
- myeclipse打war包时,报错security alert integrity check error
今天在用myeclipse打包项目时,出现如下图的提示: 在网上查找了一下原因,主要是由于Jar包不符合所导致的.解决办法如下: 将com.genuitec.eclipse.export.wizard ...
- web安全之文件上传漏洞
成因: 当文件上传时,若服务端脚本语言未对上传的文件进行严格验证和过滤,若恶意用户上传恶意的 脚本文件时,就有可能控制整个网站甚至是服务器,这就是文件上传漏洞. 权限: 1. 后台权限:登陆了后台,可 ...