日期类的加减及java中所以日期类的操作算法大全

转载自   日期类的加减及java中所以日期类的操作算法大全

1.计算某一月份的最大天数

Calendar time=Calendar.getInstance();
time.clear();
time.set(Calendar.YEAR,year); //year 为 int 
time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0    
int day=time.getActualMaximum(Calendar.DAY_OF_MONTH);//本月份的天数
注:在使用set方法之前,必须先clear一下,否则很多信息会继承自系统当前时间

2.Calendar和Date的转化

(1) Calendar转化为Date

Calendar cal=Calendar.getInstance();
Date date=cal.getTime();

(2) Date转化为Calendar

Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);

3.格式化输出日期时间 (这个用的比较多)
其一

Date date=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String time=df.format(date);
System.out.println(time);//2008-10-27 08:52:32

其二

Calendar c = Calendar.getInstance();
System.out.println(c.getTime());//Mon Oct 27 08:51:21 CST 2008
SimpleDateFormat simpleDateTimeFormat = new SimpleDateFormat(" yyyy-MM-dd HH:mm:ss ");
c = Calendar.getInstance(Locale.CHINESE);
System.out.println(simpleDateTimeFormat.format(c.getTime()));// 2008-10-27 08:51:21 


4.计算一年中的第几星期

(1)计算某一天是一年中的第几星期

Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
int weekno=cal.get(Calendar.WEEK_OF_YEAR);

(2)计算一年中的第几星期是几号

SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal=Calendar.getInstance();
cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.WEEK_OF_YEAR, 1);
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println(df.format(cal.getTime()));

输出:
2006-01-02

5.add()和roll()的用法(不太常用)

(1)add()方法

 SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");Calendar cal=Calendar.getInstance();cal.set(Calendar.YEAR, 2006);cal.set(Calendar.MONTH, 8);cal.set(Calendar.DAY_OF_MONTH, 3);cal.add(Calendar.DATE, -4);Date date=cal.getTime();System.out.println(df.format(date));cal.add(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));

输出:
    2006-08-30
    2006-09-03

(2)roll方法

cal.set(Calendar.YEAR, 2006);
cal.set(Calendar.MONTH, 8);
cal.set(Calendar.DAY_OF_MONTH, 3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE, 4);
date=cal.getTime();
System.out.println(df.format(date));

输出:
    2006-09-29
    2006-09-03
可见,roll()方法在本月内循环,一般使用add()方法;

6.计算两个任意时间中间的间隔天数(这个比较常用)

(1)传进Calendar对象

  public int getIntervalDays(Calendar startday,Calendar endday){       if(startday.after(endday)){Calendar cal=startday;startday=endday;endday=cal;}    long sl=startday.getTimeInMillis();long el=endday.getTimeInMillis();long ei=el-sl;           return (int)(ei/(1000*60*60*24));
}

(2)传进Date对象

    public int getIntervalDays(Date startday,Date endday){        if(startday.after(endday)){Date cal=startday;startday=endday;endday=cal;}        long sl=startday.getTime();long el=endday.getTime();       long ei=el-sl;           return (int)(ei/(1000*60*60*24));
}

(3)改进精确计算相隔天数的方法

 public int getDaysBetween (Calendar d1, Calendar d2) {if (d1.after(d2)) { java.util.Calendar swap = d1;d1 = d2;d2 = swap;}int days = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);int y2 = d2.get(Calendar.YEAR);if (d1.get(Calendar.YEAR) != y2) {d1 = (Calendar) d1.clone();do {days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);//得到当年的实际天数d1.add(Calendar.YEAR, 1);} while (d1.get(Calendar.YEAR) != y2);}return days;
}

注意:通过上面的方法可以衍生出求任何时间,如要查出邮箱三周之内收到的邮件(得到当前系统时间-再得到三周前时间)用收件的时间去匹配 最好装化成 long去比较
如:1年前日期(注意毫秒的转换)

  java.util.Date myDate=new java.util.Date();long myTime=(myDate.getTime()/1000)-60*60*24*365;myDate.setTime(myTime*1000);String mDate=formatter.format(myDate);

7. String 和 Date ,Long 之间相互转换 (最常用)

字符串转化成时间类型(字符串可以是任意类型,只要和SimpleDateFormat中的格式一致即可)
通常我们取时间跨度的时候,会substring出具体时间--long-比较

java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("M/dd/yyyy hh:mm:ss a",java.util.Locale.US);
java.util.Date d = sdf.parse("5/13/2003 10:31:37 AM");
long dvalue=d.getTime();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mDateTime1=formatter.format(d);

 

8. 通过时间求时间

年月周求日期

SimpleDateFormat formatter2 = new SimpleDateFormat("yyyy-MM F E");
java.util.Date date2= formatter2.parse("2003-05 5 星期五");
SimpleDateFormat formatter3 = new SimpleDateFormat("yyyy-MM-dd");
String mydate2=formatter3.format(date2);

求是星期几

mydate= myFormatter.parse("2001-1-1");
SimpleDateFormat formatter4 = new SimpleDateFormat("E");
String mydate3=formatter4.format(mydate);

9. java 和 具体的数据库结合

在开发web应用中,针对不同的数据库日期类型,我们需要在我们的程序中对日期类型做各种不同的转换。若对应数据库数据是oracle的Date类型,即只需要年月日的,可以选择使用java.sql.Date类型,若对应的是MSsqlserver 数据库的DateTime类型,即需要年月日时分秒的,选择java.sql.Timestamp类型

你可以使用dateFormat定义时间日期的格式,转一个字符串即可

 class Datetest{*method 将字符串类型的日期转换为一个timestamp(时间戳记java.sql.Timestamp)*@param dateString 需要转换为timestamp的字符串*@return dataTime timestamppublic final static java.sql.Timestamp string2Time(String dateString)throws java.text.ParseException {DateFormat dateFormat;dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss.SSS", Locale.ENGLISH);//设定格式
//dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型,timeDate.getTime()返回一个long型
return dateTime;
}*method 将字符串类型的日期转换为一个Date(java.sql.Date)
*@param dateString 需要转换为Date的字符串
*@return dataTime Date
public final static java.sql.Date string2Date(String dateString)
throws java.lang.Exception {
DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
return dateTime;
}public static void main(String[] args){
Date da = new Date();
注意:这个地方da.getTime()得到的是一个long型的值
System.out.println(da.getTime());由日期date转换为timestamp第一种方法:使用new Timestamp(long)
Timestamp t = new Timestamp(new Date().getTime());
System.out.println(t);第二种方法:使用Timestamp(int year,int month,int date,int hour,int minute,int second,int nano)
Timestamp tt = new Timestamp(Calendar.getInstance().get(Calendar.YEAR) - 1900, Calendar.getInstance().get(Calendar.MONTH), Calendar.getInstance().get(Calendar.DATE), Calendar.getInstance().get(Calendar.HOUR), Calendar.getInstance().get(Calendar.MINUTE), Calendar.getInstance().get(Calendar.SECOND), 0);
System.out.println(tt);try {
String sToDate = "2005-8-18";//用于转换成java.sql.Date的字符串String sToTimestamp = "2005-8-18 14:21:12.123";//用于转换成java.sql.Timestamp的字符串Date date1 = string2Date(sToDate);Timestamp date2 = string2Time(sToTimestamp);
System.out.println("Date:"+date1.toString());//结果显示
System.out.println("Timestamp:"+date2.toString());//结果显示
}catch(Exception e) {
e.printStackTrace();
}
}
} 


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Spring的@Scheduled实现定时任务

https://blog.csdn.net/prisonbreak_/article/details/49180307 使用Spring的Scheduled实现定时任务 2015年10月16日 16:23:21 阅读数:103485更多 个人分类: Java开发 Spring配置文件xmlns加入 xmlns:task"http://www.springframework.org/sch…

新闻发布项目——实体类(categoryTB)

package bdqn.newsMange.entity; /*** 新闻类别实体类* author Administrator**/ public class categoryTB {private int categoryID;//编号private String categoryName;//类别名public int getCategoryID() {return categoryID;}public void setCategoryID(int categoryID) {…

.NET Core 系列5 :使用 Nuget打包类库

NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全使用Nuget 管理组件之间的依赖关系,Nuget已经成为.NET 生态系统中不可或缺的一个组件,从项目角度,将项目中…

foxmail 不知道这样的主机_华为P50真机图!网友:早知道这样,就不加价买mate40了...

hello,大家好,欢迎收看本期节目由于各方面原因,今年的华为mate40系列确实很难抢不少心急的用户甚至是加价买了入手之后有的用户有开始后悔了,当然不是该机不好而是他们看到了疑似华为P50的真机渲染图它的正面并没有丑陋的双打孔&a…

F#年度调查结果概述

本文要点 年度社区调查向600多名开发人员了解了他们的F#使用情况;在工作中,F#的最大好处包括正确性、让不合法状态不可达以及能够更轻松地解决复杂的问题;大多数F#开发人员仍然使用Windows作为他们的开发平台之一,但使用Mac和Linu…

java Date获取 年月日时分秒

转载自 java Date获取 年月日时分秒 package com.util;import java.text.DateFormat; import java.util.Calendar; import java.util.Date;public class Test {public void getTimeByDate(){Date date new Date();DateFormat df1 DateFormat.getDateInstance();//日期格式&…

anroid 内存溢出 Bitmap OutOfMemoryError

Bitmap OutOfMemoryError 2014年06月09日 09:55:28 阅读数:2434 标签: OutOfMemoryErrorBitmap回收 更多 个人分类: 异常问题和解决办法 在创建Bitmap的时候由于对象过多而没有即使回收,导致的内存不足: java.lang…

wxml报错原因_C#生成、解析xml文件以及处理报错原因

转载自:http://blog.csdn.net/lilinoscar/article/details/21027319简单的介绍一下生成XML文件以及解析,因为有些数据不一定放到数据库,减少链接数据库用xml还是比较好些。如果遇到问题也就是解析时报错,对于解析,可以…

新闻发布项目——接口类(UserDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.User;/*** 用户信息接口* author Administrator**/ public interface UserDao {//查询public List<User>getAllUesr();//添加public int addUser(User user);//修改public int updateUse…

替代反射调用的几种方式及性能测试

园子里和这个话题的相关文章比较多&#xff0c;本文是旧话重提&#xff0c;外加个小的总结。主要因为近期看到很多同事、朋友都已经使用 VS2012 进行 .NET 4.5 开发了&#xff0c;却还在大量使用反射&#xff0c;不知道用新的方式。或有所了解&#xff0c;但又害怕性能不好不敢…

JAVA解析html文档,替换img图片路径成base64编码,并将文章存入数据库

转载自 JAVA解析html文档&#xff0c;替换img图片路径成base64编码&#xff0c;并将文章存入数据库开发环境&#xff1a;struts2 spring hibernate 数据库:oracle 需求&#xff1a;在HTML编辑器中输入文章&#xff0c;传入后台&#xff0c;文章中所有图片路径&#xff0c;转换…

Android Bitmap OutOfMemory 解决办法

Android Bitmap OutOfMemory 解决办法 置顶 2014年07月01日 14:41:22 阅读数&#xff1a;3072 标签&#xff1a; OutOfMemoryBitmapandroid图片优化更多 个人分类&#xff1a; 异常问题和解决办法 在Android应用里&#xff0c;最耗费内存的就是图片资源。而且在Android系统中…

为什么光标停在表格中间_word里面为什么打出来的数字中间为啥差一个光标的距离 - 卡饭网...

为Word宏添加VBA项目的数字证书签名为Word宏添加VBA项目的数字证书签名 用户在使用Word编辑文档时可以借助Word宏命令提高工作效率。在默认情况下&#xff0c;Word宏的安全性设置为“高”&#xff0c;当运行Word宏命令时会自动禁用宏。如果将Word宏安全性设置为“中”&#xff…

Java8学习笔记(1) -- 从函数式接口说起

转载自 Java8学习笔记&#xff08;1&#xff09; -- 从函数式接口说起希望本文能够成为Java8 Lambda表达式的快速入门指南。 函数式接口 理解Functional Interface&#xff08;函数式接口&#xff0c;以下简称FI&#xff09;是学习Java8 Lambda表达式的关键所在&#xff0c;所…

.Net Aop(静态织入)框架 BSF.Aop

BSF.Aop .Net 免费开源&#xff0c;静态Aop织入&#xff08;直接修改IL中间语言&#xff09;框架&#xff0c;类似PostSharp(收费)&#xff1b;实现前后Aop切面和INotifyPropertyChanged注入方式。 开源地址: https://git.oschina.net/chejiangyi/BSF.Aop 开源QQ群: .net 开源基…

C#7.0中有哪些新特性?

以下将是 C# 7.0 中所有计划的语言特性的描述。随着 Visual Studio “15” Preview 4 版本的发布&#xff0c;这些特性中的大部分将活跃起来。现在是时候来展示这些特性&#xff0c;你也告诉借此告诉我们你的想法&#xff01; C&#xff03;7.0 增加了许多新功能&#xff0c;并…

java8的函数指针

转载自 java8的函数指针这段时间 项目实在是太紧了&#xff0c;没有时间写博客啊。java模式的文章还没有写完&#xff0c;后期在写吧。 最近项目中大量的使用到了远程调用以及回调。是采用反射的方式实现的。担心到大量的反射会影响到程序运行的效率问题。 所以决定放弃使用反…

新闻发布项目——接口类(newsTbDao)

package bdqn.newsMange.Dao;import java.util.List;import bdqn.newsMange.entity.newsTb;/*** 新闻的接口类* author Administrator**/ public interface newsTbDao {//查询public List<newsTb>getnewsTbAll();//添加public int addNewsTb(newsTb news);//修改public i…

nbiot开发需要掌握什么_学习软件开发需要准备什么?

2020年&#xff0c;随着Internet的不断发展&#xff0c;现在Internet已经融入到每个人的生活中&#xff0c;所以在计算机行业的发展中&#xff0c;软件开发技术就显得非常重要&#xff0c;因为它是与我们的生活息息相关的&#xff0c;选择许多人想学习Java软件开发技术&#xf…

面试项目 java-服务端 18h58

以淘宝为例子介绍一下 这个架构非常之复杂&#xff0c;创业公司无法达到这样的架构&#xff0c;在当前阶段找到适合的架构 用户名唯一 横向越权 纵向越权 ftp服务器 mybatis mybatis反向工程 mybatis pageHelper 所有的东西在一个服务器上面 三台服务器单独做一个东…