java日期相关类实例详解

一、Date类

类 Date 表示特定的瞬间,精确到毫秒。用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负。

Date类中很多方法已经过时,使用Calendar来替代。

常用方法有

long getTime()
void setTime(long time)

public class T01Date {
  public static void main(String[] args) {
    //getTime():返回的时间是距离1970年的毫秒数.值不受setTime()的影响
    //date值受setTime()的影响
    Date date=new Date();
    long current=date.getTime();
    System.out.println(current);//1472002479966
    System.out.println(date);//Wed Aug 24 09:34:39 CST 2016
    long time=current+1000*60*60*24;//时间设置为明日此时
    date.setTime(time);
    System.out.println(date.getTime());//1472002479966
    System.out.println(current);//1472002479966
    System.out.println(date);// Thu Aug 25 09:34:39 CST 2016
  }
} 

二、SimpleDateFormat

SimpleDateFormat根据特定的日期格式在Date和字符串之间转换

常用方法

String format(Date date):将日期按照指定格式转换成字符串
Date parse(String str):将字符串按照指定格式转换成Date

可以用来指定格式的字符

/**
 * java.text.SimpleDateFormat
 * 该类可以根据一个指定的日期格式将Date于String
 * 之间相互转换
 * @author zc
 *
 */
public class T02SimpleDateFormat {
  public static void main(String[] args) throws ParseException {
    Date now =new Date();
    //2016-08-12 09:55:23
    //yyyy-MM-dd hh:ss:mm
    SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日 hh时ss分mm秒");
    String str = sdf.format(now);
    System.out.println(str);
    //a 居然能区分上下午汉字
    String strDate="2012年12月20日下午12点20分30秒";
    SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd日ahh点ss分mm秒");
    Date date=sdf2.parse(strDate);
    System.out.println(date);
  }
} 

三、Calendar

java.util.Calendar是抽象类,主要用来对时间分量进行计算。

常用方法

(1)Date和Calendar之间的转换

  //默认创建出来的Calendar的实现类表示当前系统时间
    Calendar c=Calendar.getInstance();
    //将Calendar转换为Date
    Date date=c.getTime();
    //Date->Calendar
    /*
     * void setTime(Date date)
     * 该方法可以使当前Calendar表示给定的
     * Date所表示的时间
     * */
    c.setTime(date);
  }
} 

(2)getInstance()方法

Calendar是抽象类,其提供了一个工厂方法:Calendar getInstance()用来获取Calendar类型的实例

(3)get(int field)方法获取时间分量

import java.util.Calendar;
/**
 * Calendar提供了获取各个时间分量的值的方法
 * @author zc
 */
public class T05Calendar2 {
  public static void main(String[] args) {
    Calendar c=Calendar.getInstance();
    //获取年
    int year=c.get(Calendar.YEAR);
    System.out.println("year:"+year);//2016
    //获取月:月从0开始!!!,0表示一月
    int month=c.get(Calendar.MONTH);
    System.out.println("month:"+month);//7
    /*
     * 和天相关的时间分量
     * DATE,DAY_OF_MONTH:是一致的,表示月中的第几天
     * DAY_OF_YEAR:表示年中的天
     * DAY_OF_WEEK:表示周中的天
     *
     * */
    System.out.println(c.get(Calendar.DATE));
    System.out.println(c.get(Calendar.DAY_OF_MONTH));
    System.out.println(c.get(Calendar.DAY_OF_YEAR));
    System.out.println(c.get(Calendar.DAY_OF_WEEK));
    int dow=c.get(Calendar.DAY_OF_WEEK)-1;
    String[] data={"日","一","二","三","四","五","六"};
    System.out.println("周"+data[dow]);
    //获取小时,分钟,秒   HOUR_OF_DAY:24小时  HOUR:12小时
    System.out.println(c.get(Calendar.HOUR_OF_DAY));//14
    System.out.println(c.get(Calendar.HOUR));//2
    System.out.println(c.get(Calendar.MINUTE));
    System.out.println(c.get(Calendar.SECOND));
  }
} 

(4)set()方法设置时间分量

/**
 * 设置时间分量
 * @author zc
 *
 */
public class T06Calendar3 {
  public static void main(String[] args){
    //表示2008-08-08 20:08:08
    //设置年
    Calendar c=Calendar.getInstance();
    c.set(Calendar.YEAR,2008);
    //设置月,月从0开始
    c.set(Calendar.MONTH,Calendar.AUGUST);
    //设置日
    c.set(Calendar.DATE, 8);
    //设置时
    c.set(Calendar.HOUR_OF_DAY,20);
    //设置分
    c.set(Calendar.SECOND,8);
    //设置秒
    c.set(Calendar.MINUTE,8);
    System.out.println(c.getTime());
    //!!!设置的时间分量超出后,会自行进位
  }
} 

(5)add()方法在当前时间分量基础上修改时间分量

(6)getActualMaximum()获取某个时间分量所允许的最大值

/**
 * 获取某个时间分量所允许的最大值
 * @author zc
 */
public class T07Calendar4 {
  public static void main(String[] args) {
    Calendar c=Calendar.getInstance();
    //查看当月共多少天
    int days=c.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    //查看今年多少天
    int doy=c.getActualMaximum(Calendar.DAY_OF_YEAR);
    System.out.println(doy);
    int t=c.getActualMaximum(Calendar.MINUTE);
    System.out.println(t);
  }
} 

四、Date、SimpleDateFormat和Calendar的一个综合实例

@Test
  public void test01() throws ParseException{
    //要求用户输入一个日期,计算后,指定格式输出日期
    /*String--SimpleDateFormat()-->Date
    Date-->Calendar
    使用Calendar进行相应计算
    Calendar-->Date
    Date--SimpleDateFormat-->String
    */
    String input="2013-03-26"; 

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
    Date date=sdf.parse(input);
    Calendar c=Calendar.getInstance();
    //set(),与add()
    c.setTime(date);
    c.add(Calendar.YEAR,1);
    c.set(Calendar.MONTH,0);
    c.set(Calendar.DAY_OF_WEEK,1); 

    date=c.getTime();
    SimpleDateFormat sdf2=new SimpleDateFormat("yyyy年MM月dd分hh时ss分mm秒");
    String strTime=sdf2.format(date);
    System.out.println(strTime);
  } 

总结

以上就是本文关于java日期相关类实例详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Java开发基础日期类代码详解、Java编程实现时间和时间戳相互转换实例等,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

(0)

相关推荐

  • 浅析Java.IO输入输出流 过滤流 buffer流和data流

    java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入: 缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区

  • 从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate

    本文会介绍从一个最基本的java工程,到Web工程,到集成Spring.SpringMVC.SpringDataJPA+Hibernate. 平时我们可能是通过一个模板搭建一个工程,或者是直接导入一个项目,而本文选择从最基本的java工程开始,目的是为了展示更多原理. 当然,我们还是从一个最基本的Maven工程开始,其实普通的非Maven工程,搭建过程几乎是一模一样的,只是Jar包需要我们手动的添加到工程中,而Maven工程就只是修改配置文件即可. 下面就正式开始. 1.基于Maven(如果不使

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • 详解java之redis篇(spring-data-redis整合)

    1,利用spring-data-redis整合 项目使用的pom.xml: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/ma

  • java DataInputStream和DataOutputStream详解及实例代码

    java DataInputStream和DataOutputStream详解 操作基本数据类型的流 DataInputStream DataOutputStream import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; public c

  • java日期相关类实例详解

    一.Date类 类 Date 表示特定的瞬间,精确到毫秒.用距离1970年1月1日00:00:00的毫秒数(long)类型来表示一个特定的时间点,该值可正可负. Date类中很多方法已经过时,使用Calendar来替代. 常用方法有 long getTime() void setTime(long time) public class T01Date { public static void main(String[] args) { //getTime():返回的时间是距离1970年的毫秒数.

  • Java常用类之日期相关类使用详解

    目录 日期相关类 1.Date类 2.DateFormat类 3.Calendar类 日期相关类 1.Date类 在标准Java类库中包含一个Date类,它的对象表示一个特定的瞬间,精确到毫秒.在网上商城下单时,在对报销单进行审核时,都需要获取当前的时间,通过Date类就可以完成. 例子:Date类的使用 package li.normalclass.date; import java.util.Date; public class TestDate { public static void m

  • java Arrays工具类实例详解

    Arrays工具类属于java中常用的工具类 public static void sort(int[] a) public static void sort(int[] a,int fromIndex, int toIndex) public static void sort(long[] a) public static void sort(long[] a,int fromIndex, int toIndex) public static void sort(short[] a) publ

  • java 中 String format 和Math类实例详解

    java 中 String format 和Math类实例详解 java字符串格式化输出 @Test public void test() { // TODO Auto-generated method stub //可用printf(); System.out.println(String.format("I am %s", "jj")); //%s字符串 System.out.println(String.format("首字母是 %c",

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java常用类之字符串相关类使用详解

    目录 字符串相关类 1.String类的使用 2.理解String类源码 3.使用StringBuilder类 4.StringBuilder类源码 字符串相关类 String.StringBuilder.StringBuffer类是三个字符串相关类. String类代表不可变字符序列,StringBuilder类和StringBuffer类代表可变字符序列. 关于这三个类的详细的用法,在笔试和面试以及实际开发中经常能用到,我们必须掌握好它. 1.String类的使用 String的常用方法:

  • Java 反射机制的实例详解

    Java 反射机制的实例详解 前言 今天介绍下Java的反射机制,以前我们获取一个类的实例都是使用new一个实例出来.那样太low了,今天跟我一起来学习学习一种更加高大上的方式来实现. 正文 Java反射机制定义 Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 用一句话总结就是反射可以实现在运行时可以知道任意一个类的属性和方法. 反射

  • Java 实现FTP服务实例详解

    Java 实现FTP服务实例详解 1.FTP简介 FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为"文传协议".用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件.在FTP的使用当中,用户经常遇到两个概念:"下载"(Download)和"上传"(Upload)."

  • Spring MVC自定义日期类型转换器实例详解

    Spring MVC自定义日期类型转换器实例详解 WEB层采用Spring MVC框架,将查询到的数据传递给APP端或客户端,这没啥,但是坑的是实体类中有日期类型的属性,但是你必须提前格式化好之后返回给它们.说真的,以前真没这样做过,之前都是一口气查询到数据,然后在jsp页面上格式化,最后展示给用户.但是这次不同,这次我纯属操作数据,没有页面.直接从数据库拿数据给它们返数据.它们给我传数据我持久化数据,说到这里一个小问题就默默的来了. 首先把问题还原一下吧(这是一个数据导出功能),下图中用红框圈

  • java 回调机制的实例详解

    java 回调机制的实例详解 序言 最近接触到了回调机制(CallBack).初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义.当然了,我在理解了回调之后,再去看网上的各种讲解,确实没什么问题.但是,对于初学的我来说,缺了一个循序渐进的过程.此处,将我对回调机制的个人理解,按照由浅到深的顺序描述一下,如有不妥之处,望不吝赐教! 开始之前,先想象一个场景:幼稚园的小朋友刚刚学习了10以内的加法. 第1章. 故事的缘起 幼师在黑板上

随机推荐