java 日期相关用法

1.DateFormat类

DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化。将日期表示为 Date 对象,或者表示为从 GMT(格林尼治标准时间)1970 年 1 月 1 日 00:00:00 这一刻开始的毫秒数。

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Locale;

public class DateDemo04 {
    public static void main(String args[]) throws ParseException {
        formatEnDate();
        formatZhDate();
        parseEnDate();
        parseZhDate();
    }

    /**
     * 格式化英文日期以及时间
     */
    private static void formatEnDate() {
        DateFormat df1 = null; // 声明一个DateFormat
        DateFormat df2 = null; // 声明一个DateFormat
        DateFormat df3 = null;
        df1 = DateFormat.getDateInstance(); // 得到默认的日期的DateFormat对象
        df2 = DateFormat.getDateTimeInstance(); // 得到默认的日期时间的DateFormat对象
        df3 = DateFormat.getTimeInstance();// 得到默认的时间的DateFormat对象

        System.out.println("格式化英文日期 DATE:" + df1.format(new Date())); // 输出2017-6-9
        System.out.println("格式化英文日期和时间 DATETIME:" + df2.format(new Date())); //输出2017-6-9 9:59:56
        System.out.println("格式化英文时间 DATETIME:" + df3.format(new Date())); //输出9:59:56
    }


    /**
     * 格式化中文日期以及时间
     */
    private static void formatZhDate() {
        DateFormat df1 = null; // 声明一个DateFormat
        DateFormat df2 = null; // 声明一个DateFormat
        df1 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD, new Locale(
                "zh", "CN")); // 得到日期的DateFormat对象
        df2 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,
                DateFormat.ERA_FIELD, new Locale("zh", "CN")); // 得到日期时间的DateFormat对象
        System.out.println("格式化中文日期  DATE:" + df1.format(new Date())); //输出2017年6月9日
        System.out.println("格式化中文日期和时间  DATETIME:" + df2.format(new Date())); //输出2017年6月9日 上午09时59分56秒 CST
    }

    /**
     * 解析英文格式的日期为Date
     * 
     * @throws ParseException
     */
    private static void parseEnDate() throws ParseException {
        DateFormat df1 = DateFormat.getDateTimeInstance(); // 得到日期和时间的DateFormat对象
        Date date1 = df1.parse("2017-6-8 21:09:44");// 解析和df1格式对应的字符串,将其解析为Date
        System.out.println("解析成Date后,格式化为英文日期时间 DATETIME:" + df1.format(date1)); //输出2017-6-8 21:09:44

        DateFormat df2 = DateFormat.getDateInstance(); // 得到日期的DateFormat对象
        Date date2 = df2.parse("2017-6-8");
        System.out.println("解析成Date后,格式化为英文日期 DATETIME:" + df2.format(date2));//输出2017-6-8
    }

    /**
     * 解析中文格式的日期为Date
     * 
     * @throws ParseException
     */
    private static void parseZhDate() throws ParseException {
        DateFormat df1 = DateFormat.getDateTimeInstance(DateFormat.YEAR_FIELD,
                DateFormat.ERA_FIELD, new Locale("zh", "CN")); // 得到默认的日期时间的DateFormat对象
        Date date1 = df1.parse("2017年6月8日 下午09时19分18秒 CST");// 此处的中文要跟df1对应上,注意秒与CST有空格,否则解析会异常。
        System.out.println("解析成Date后,格式化为中文日期时间:" + df1.format(date1));//输出2017年6月8日 下午09时19分18秒 CST

        DateFormat df2 = DateFormat.getDateInstance(DateFormat.YEAR_FIELD,
                new Locale("zh", "CN")); // 得到日期的DateFormat对象
        Date date2 = df2.parse("2017年6月9日");
        System.out.println("解析成Date后,格式化为中文日期:" + df2.format(date2));//输出2017年6月9日

    }
};

2.SimpleDateFormat类

SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类。它允许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

此类的功能是完成日期的显示格式化的,例如,在开发中,可以会将一种日期格式变为另外一种日期格式

原始日期:2008-10-19 10:11:30.345
转换后日期:2008 年 10 月 19 日 10 点 11 分 30 秒 345 毫秒
但是以上的两个日期中日期的数字是完全一样的,唯一不同的是日期的显示格式不同,所以要想实现这样的转换功能就必须依靠SimpleDateFormat类
如果要想实现转换,则必须首先准备好一个模板,通过此模板进行日期数字的提取工作。

在SimpleDateFormat类使用的时候,必须注意的是在构造对象时要传入匹配的模板
构造方法:public SimpleDateFormat(String pattern)
转换:public Date parse(String source)throws ParseException –>此时取得的是全部时间数。
格式化:public final String Format(Date date) –>将时间重新格式化成字符串显示。

SimpleDateFormat 使得可以选择任何用户定义的日期-时间格式的模式。但是,仍然建议通过 DateFormat 中的 getTimeInstance、getDateInstance 或 getDateTimeInstance 来创建日期-时间格式器。每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。可以根据需要使用 applyPattern 方法来修改格式模式。

代码样例

import java.text.*;
import java.util.*;

public class DateDemo05 {
    public static void main(String args[]) throws ParseException {
        String strDate = "2008-10-19 10:11:30.345";
        // 准备第一个模板,从字符串中提取出日期数字Date
        String pat1 = "yyyy-MM-dd HH:mm:ss.SSS";
        // 准备第二个模板,将提取后的日期数字变为指定的格式
        String pat2 = "yyyy年MM月dd日 HH时mm分ss秒SSS毫秒";
        SimpleDateFormat sdf1 = new SimpleDateFormat(pat1); // 实例化模板对象,用户自定义的模版对象
        SimpleDateFormat sdf2 = new SimpleDateFormat(pat2); // 实例化模板对象
        Date d = sdf1.parse(strDate); // 将给定的字符串中的日期提取出来,注意sdf1和strDate要匹配
        System.out.println(sdf2.format(d)); // 将日期变为新的格式,输出为:2008年10月19日 10时11分30秒345毫秒
    }
};

format的入参可以是long

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    
 String datetime = sdf.format(Long.parseLong("1323842302")*1000);    
 String datetime = sdf.format(1325433638000L);  //毫秒转为字符串  
 System.out.println(datetime);   //输出2012-01-02 00:00:38
DateFormat format = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");  
try {  
      Date myDate = format.parse("2012/01/02 00:00:38");  
      System.out.println(myDate.toString()); //输出Mon Jan 02 00:00:38 CST 2012 
      System.out.println(myDate.getTime()); //标准字符串转为毫秒(格林时间)  1325433638000
 } catch (ParseException e1) {  
      e1.printStackTrace();  
}  

3.关于SimpleDateFormat安全的时间格式化线程安全问题

http://blog.csdn.net/zxh87/article/details/19414885

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值