您的位置:首页 > 编程语言 > Java开发

Java时间格式大全

2014-04-14 19:48 465 查看
**
* <p>Title: 时间格式转化与计算</p>
*/

package web.com;

import java.util.Calendar;
import java.util.Date;
import java.text.*;

public class DateTime {
public DateTime() {
}

/**
* 取得系统当前时间
* @return String yyyy-mm-dd
*/
public String getCurrentDate() {
Calendar rightNow = Calendar.getInstance();
int year = rightNow.get(rightNow.YEAR);
int month = rightNow.get(rightNow.MONTH) + 1;
int day = rightNow.get(rightNow.DATE);
return year + "-" + month + "-" + day;
}

/**
* 取得系统当前时间
* @return String yyyy年mm月dd日
*/
public String getCurrentDate1() {
Calendar rightNow = Calendar.getInstance();
int year = rightNow.get(rightNow.YEAR);
int month = rightNow.get(rightNow.MONTH) + 1;
int day = rightNow.get(rightNow.DATE);
return year + "年" + month + "月" + day + "日";
}

/**
* 取得系统当前时间
* @return String yyyymmdd
*/
public String getCurrentDate2() {
Calendar rightNow = Calendar.getInstance();
int year = rightNow.get(rightNow.YEAR);
int month = rightNow.get(rightNow.MONTH) + 1;
int day = rightNow.get(rightNow.DATE);
return year + "" + month + "" + day;
}

/**
* 取得系统当前时间
* @return String yyyy-mm
*/
public String getCurrentDate3() {
Calendar rightNow = Calendar.getInstance();
int year = rightNow.get(rightNow.YEAR);
int month = rightNow.get(rightNow.MONTH) + 1;
//int day = rightNow.get(rightNow.DATE);
return year + "-" + month;
}

/**
* 取得系统当前时间
* @return String yyyyMMddhhmmss
*/
public String getCurrentDate4() {
Calendar c = Calendar.getInstance();
c.add(c.SECOND, 0);

return "" + c.get(c.YEAR) + "" + (c.get(c.MONTH) + 1) + "" + c.get(c.DATE)+""+c.get(c.HOUR_OF_DAY)+""+c.get(c.MINUTE)+""+c.get(c.SECOND);

}

/**
* 取得系统当前时间
* @return String yyyy-MM-dd hh:mm:ss  //12时制
* @return String yyyy-MM-dd HH:mm:ss  //24时制
*/
public String getCurrentDate5() {
SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// SimpleDateFormat simpleDateFormat =new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
java.util.Date date = new java.util.Date();
String time = simpleDateFormat.format(date);
return time;
}

/**
* 取得系统当前时间
* @return String yyyy-MM-dd hh:mm:ss
*/

public String getCurrentDate5(){
Calendar c = Calendar.getInstance();
c.add(c.SECOND, 0);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE)+" "+c.get(c.HOUR_OF_DAY)+":"+c.get(c.MINUTE)+":"+c.get(c.SECOND);
}

/**
* 取得系统当前时间 常用于订单号
* @return String yyyyMMddhhmmss
*/
public String getCurrentDate6() {
Calendar c = Calendar.getInstance();
c.add(c.SECOND, 0);
String year=c.get(c.YEAR)+"";
return "" + year.subSequence(2,year.length())+ "" + (c.get(c.MONTH) + 1) + "" + c.get(c.DATE)+"-"+c.get(c.HOUR_OF_DAY)+""+c.get(c.MINUTE)+""+c.get(c.SECOND)+"-"+c.get(c.MILLISECOND);

}

/**
* 取得系统当前时间前n个月的相对应的一天
* @param n int
* @return String yyyy-mm-dd
*/
public String getNMonthBeforeCurrentDay(int n) {
Calendar c = Calendar.getInstance();
c.add(c.MONTH, -n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);

}

/**
* 取得系统当前时间后n个月的相对应的一天
* @param n int
* @return String  yyyy-mm-dd
*/
public String getNMonthAfterCurrentDay(int n) {
Calendar c = Calendar.getInstance();
c.add(c.MONTH, n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);

}

/**
* 取得系统当前时间前n天
* @param n int
* @return String yyyy-mm-dd
*/
public String getNDayBeforeCurrentDate(int n) {
Calendar c = Calendar.getInstance();
c.add(c.DAY_OF_MONTH, -n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);
}

/**
* 取得系统当前时间后n天
* @param n int
* @return String yyyy-mm-dd
*/
public String getNDayAfterCurrentDate(int n) {
Calendar c = Calendar.getInstance();
c.add(c.DAY_OF_MONTH, n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);
}

//---------------------------------------------------------------------
//取过去一个时间对应的系统当年的一天
public String getCurrentDateAfterPastDate(String sPastDate) {
if (sPastDate != null && !sPastDate.equals("")) {
Date date = switchStringToDate(sPastDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
int iPastYear = c.get(c.YEAR);
Calendar c1 = Calendar.getInstance();
int iCurrentYear = c1.get(c1.YEAR);
c.add(c.YEAR, iCurrentYear - iPastYear);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" +
c.get(c.DATE);
}
else {
return null;
}
}

/**
* 将一个日期字符串转化成日期
* @param sDate String
* @return Date yyyy-mm-dd
*/
public Date switchStringToDate(String sDate) {
Date date = null;
try {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
date = df.parse(sDate);

}
catch (Exception e) {
System.out.println("日期转换失败:" + e.getMessage());
}
return date;
}

/**
* 输入两个字符串型的日期,比较两者的大小
* @param fromDate String
* @param toDate String
* @return boolean before为true
*/
public boolean compareTwoDateBigOrSmall(String fromDate, String toDate) {
Date dateFrom = this.switchStringToDate(fromDate);
Date dateTo = this.switchStringToDate(toDate);
if (dateFrom.before(dateTo)) {
return true;
}
else {
return false;
}
}

/**
* 将一个日期字符串转化成Calendar
* @param sDate String
* @return Calendar
*/
public Calendar switchStringToCalendar(String sDate) {
Date date = switchStringToDate(sDate);
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}

/**
* 将一个日期转化成Calendar
* @param date Date
* @return Calendar
*/
public Calendar switchStringToCalendar(Date date) {
Calendar c = Calendar.getInstance();
c.setTime(date);
return c;
}

public  String string2Date(String dateString)
throws java.lang.Exception {
/*DateFormat dateFormat;
dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
dateFormat.setLenient(false);
java.util.Date timeDate = dateFormat.parse(dateString);//util类型
//java.sql.Date dateTime = new java.sql.Date(timeDate.getTime());//sql类型
java.sql.Timestamp dateTime = new java.sql.Timestamp(timeDate.getTime());//Timestamp类型
*/
SimpleDateFormat newk = new SimpleDateFormat ("yyyy.MM.dd hh:mm:ss");
SimpleDateFormat old = new SimpleDateFormat("MMM dd hh:mm:ss yyyy");

String strDate = "Mar 22 00:42:00 2002";
Date d = old.parse(strDate);
System.out.println(newk.format(d));

return newk.format(d);
}

/**
* 取得某个时间前n个月的相对应的一天
* @param sDate String
* @param n int
* @return String yyyy-mm-dd
*/
public String getNMonthBeforeOneDay(String sDate, int n) {
Calendar c = switchStringToCalendar(sDate);
c.add(c.MONTH, -n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);

}

//取得某个时间后n个月的相对应的一天
public String getNMonthAfterOneDay(String sDate, int n) {
Calendar c = switchStringToCalendar(sDate);
c.add(c.MONTH, n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);

}

//取得某个时间前n天,格式为yyyy-mm-dd
public String getNDayBeforeOneDate(String sDate, int n) {
Calendar c = switchStringToCalendar(sDate);
c.add(c.DAY_OF_MONTH, -n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);
}

//取得某个时间后n天,格式为yyyy-mm-dd
public String getNDayAfterOneDate(String sDate, int n) {
Calendar c = switchStringToCalendar(sDate);
c.add(c.DAY_OF_MONTH, n);
return "" + c.get(c.YEAR) + "-" + (c.get(c.MONTH) + 1) + "-" + c.get(c.DATE);
}

//判断系统当前时间是不是润年
public boolean isRunNian() {
java.util.Calendar rightNow = java.util.Calendar.getInstance();
int year = rightNow.get(rightNow.YEAR);
if (0 == year % 4 && (year % 100 != 0 || year % 400 == 0)) {
return true;
}
else {
return false;
}

}

public static void main(String args[]) {
DateTime a = new DateTime();
try{
System.out.println(a.getCurrentDate6());
System.out.println(a.getCurrentDate6());
}catch(Exception e){System.err.println();}

}

java操作日期比较麻烦,和ASP比就可以说是相当麻烦了。。这里我把自己常用的几个操作日期相关的方法编译成一个工具类,之后就可以在工程里面直接调用这些方法了。。
程序代码:

/*
* Created on 2005-6-28
* Made In GamVan
*/
package com.gamvan.tools;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class FormatDateTime {

/**
* 日期类操作工具
* @author GamVan by 我容易么我
* Powered by GamVan.com
*/
public static String formatDateTime(String ymd){
//格式化当前时间
java.text.SimpleDateFormat isNow = new java.text.SimpleDateFormat(ymd);
String now = isNow.format(new java.util.Date());
return now;
}

public static String formatDateTime(String ymd, String datetime){
//格式化当前时间
java.text.SimpleDateFormat isNow = new java.text.SimpleDateFormat(ymd);
String now = "";
try{
isNow.format(datetime);
}catch(Exception e){
e.printStackTrace();
}
return now;
}

/* 比较当前日期和指定日期 return boolean
* 如果当前日期在指定日期之后返回true否则返回flase
*/
public static boolean dateCompare(String str){
boolean bea = false;
SimpleDateFormat sdf_d = new SimpleDateFormat("yyyy-MM-dd");
String isDate = sdf_d.format(new java.util.Date());
java.util.Date date1;
java.util.Date date0;
try {
date1 = sdf_d.parse(str);
date0= sdf_d.parse(isDate);
if(date0.after(date1)){
bea = true;
}
} catch (ParseException e) {
bea = false;
}
return bea;
}

/*
* 比较当前月份和指定月份
* 如果当前月份在指定月份之后返回true否则返回flase
*/
public static boolean monthCompare(String str){
boolean bea = false;
SimpleDateFormat sdf_m = new SimpleDateFormat("yyyy-MM");
String isMonth = sdf_m.format(new java.util.Date());
java.util.Date date1;
java.util.Date date0;
try {
date1 = sdf_m.parse(str);
date0= sdf_m.parse(isMonth);
if(date0.after(date1)){
bea = true;
}
} catch (ParseException e) {
bea = false;
}
return bea;
}

/* 比较当前日期和指定日期 return boolean
* 如果当前日期在指定日期之后返回true否则返回flase
*/
public static boolean secondCompare(String str){
boolean bea = false;
SimpleDateFormat sdf_d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String isDate = sdf_d.format(new java.util.Date());
java.util.Date date1;
java.util.Date date0;
try {
date1 = sdf_d.parse(str);
date0= sdf_d.parse(isDate);
if(date0.after(date1)){
bea = true;
}
} catch (ParseException e) {
bea = false;
}
return bea;
}

/**
* 比较指定两日期如果str1晚于str2则return true;
* @param str1
* @param str2
* @return
*/
public static boolean secondCompare(String str1, String str2){
boolean bea = false;
SimpleDateFormat sdf_d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date date1;
java.util.Date date0;
try {
date1 = sdf_d.parse(str1);
date0= sdf_d.parse(str2);
if(date0.after(date1)){
bea = true;
}
} catch (ParseException e) {
bea = false;
}
return bea;
}

/**
* 设置间隔数后返回时间
* @param type 间隔类型 秒或者天
* @param  间隔数字 比如1秒或者一天
* @return
*/
public static String dateAdd(String type, int i){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = formatDateTime("yyyy-MM-dd HH:mm:ss");
Calendar c = Calendar.getInstance();   // 当时的日期和时间
if(type.equals("s")){
int s = c.get(Calendar.SECOND);
s = s + i;
c.set(Calendar.SECOND, s);
str = df.format(c.getTime());
}
else if(type.equals("d")){
int d = c.get(Calendar.DAY_OF_MONTH);  // 取出“日”数
d = d + i;
c.set(Calendar.DAY_OF_MONTH, d);       // 将“日”数设置回去
str = df.format(c.getTime());
}
return str;
}

/* test
public static void main(String args[]){
String s1 = FormatDateTime.formatDateTime("yyyy-MM-dd","2005-10-12");
System.out.println(s1);
}
*/

}

几个常见的关于日期的问题

作者:佚名 来源:InterNet 加入时间:2005-1-8
1. 怎样计算两个时间之间的间隔?

间隔=Date1.getTime()-Date2.getTime();得出来的是毫秒数.
除1000是秒,再除60是分,再除60是小时..............................

记住java标准库中所有时间类都以此为基础转化的,只是他写好了一些
转化的方法给你用而已.但都离不开这个毫秒数为基础.

2. t=Calendar.getInstance();m=t.get(t.MONTH)+1;这里为什么要加一?

在java语言里,date的month的取值范围是:0~11,与人们的自然表达上相差1。

3. 系统时间与当前日期的区别?

系统时间确切的说应该是
System.currentTimeMillis();
new Date()是当前日期,虽然它getTime();和System.currentTimeMillis();
一样,但System.currentTimeMillis();

4. 如何计算两个日期的天数差值?

long beginTime = beginDate.getTime();
long endTime2 = endDate.getTime();
long betweenDays = (long)((endTime - beginTime) / (1000 * 60 * 60 *24) + 0.5);

5. 如何比较日期时间大小?

第一种方法:
use Calendar object to compare
java.util.Calendar class can be used to compare date. In order to do this,
you guy should parse that string into int year, month, day and construct a
Calendar object, and then do comparison.

Below is a sample

StringTokenizer token = new StringTokenizer(your string,"-");
int year = Integer.parseInt(token.nextToken());
int month = Integer.parseInt(token.nextToken());
int day = Integer.parseInt(token.nextToken());
Calendar date = Calendar.getInstance();
date.set(year,month,day);
Calendar today = Calendar.getInstacne();
if(date.after(today)){
//......
}
第二种方法
Date nowDate=new Date();//当前时间\r
long nowTime=nowDate.getTime;
long lastTime=userTime.longValue();//以前的时间\r
long time=nowTime-lastTime;//时间相减比较。
if(time>(long)60000)//1分钟{}

另外可用以下参考
用时间戳,Date.getTime()可以把当前时间改成时间戳,
用CompareTo();
用before(),after(),equals();

6. 格式化日期的问题\r

目的:
第一次求日期
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd");
String riqi=formatter.format(currentTime_1);
第二次求时间\r
java.text.DateFormat format1 = new java.text.SimpleDateFormat("hhmmss");
java.util.Date currentTime_2 = new java.util.Date();
String shijian=format1.format(currentTime_2);
得到的结果是
2002-02-19和115324(11点53分24秒)

实现:
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd-H-mm-ss");
java.util.Date currentTime_1 = new java.util.Date();
String str_date = formatter.format(currentTime_1);
StringTokenizer token = new StringTokenizer(str_date,"-");
String year = token.nextToken();
String month= token.nextToken();
String day = token.nextToken();
String hh = token.nextToken();
String mm = token.nextToken();
String ss = token.nextToken();
String riqi=year+"年\\"+month+"月"+day+"日"+"  "+hh+"点\\"+mm+"分"+ss+"秒\\";
String newdir=year+month+day;
String wenjian = hh+mm+ss;

7.  怎么得到一个月的天数?

java.util.Calendar date = java.util.Calendar.getInstance();
System.out.println(date.getActualMaximum(date.DAY_OF_MONTH));

示例程序代码在Java Web服务器上接受测试,该服务器配置了JDK 1.31。示例写得很标准,在Tomcat或者其他JSP Web服务器(JDK 1.2或者以后版本)上运行的效果几乎完全一样。

通过表单把日期传递给JSP页

Date(日期)参数是用户从3栏下拉列表中选出来的。用户提交表单之后,这些参数即被传送给处理页面。

在进行日历编程时不要忘了导入java.util.Calendar:
〈%@ page import="java.util.Calendar" %〉

处理页面的第1个任务是接收以下日期参数值:Date、Month和Year。
int curDate = 1;
if(request.getParameter("curDate") != null)
{
curDate = Integer.parseInt(request.getParameter("curDate"));
}

注意页面参数被转换为int类型,马上我们就知道为什么要这么做了。

Calendar对象

我们的目标是创建和设置一个Calendar对象,用它进行日期计算。为此,我们首先需要实例化一个Calendar对象。
Calendar cal = Calendar.getInstance();

Calendar.getInstance()返回一个代表当前日期和时间的Calendar对象。
cal.clear();
cal.set(curYear, curMonth , curDate);

clear()方法清空Calendar,这样我们才可能给该对象分配我们自己的日期值并为将来的计算做好准备。注意这些参数的顺序:首先是年,最后是日期。

从Calendar获取信息

以下是一组Calendar字段:

日期
DATE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_YEAR

时间
HOUR_OF_DAY, MINUTE, MILLISECOND, SECOND

周
WEEK_OF_MONTH, WEEK_OF_YEAR

年
YEAR

以上这些字段都可以通过Calendar的get()方法进行访问,结果返回一个整数。以下代码示例显示了以上过程。

一周内的日期
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);
out.print("〈br〉Day of Week: " + dayOfWeek + " 〈br〉");

一月内的日期
int dayOfMonth = cal.get(cal.DAY_OF_MONTH);
out.print("〈br〉Day of Month: " + dayOfMonth + " 〈br〉");

定位特定的日期

为了找出一周内特定的某一天就必须访问DAY_OF_WEEK字段。该字段包含了范围从1到7的整数值,1代表星期一,2代表星期二,其余以次类推。
int dayOfWeek = cal.get(cal.DAY_OF_WEEK);

这里有个向用户显示日期的好方法,那就是声明一个包含一周内天数的数组。然后就可以很方便地显示各个日期了。只要采用DAY_OF_WEEK整数访问数组内的当前日期即可。
String[] weekdays = new String[]
{“”, "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
〈%=weekdays[cal.get(cal.DAY_OF_WEEK)]%〉

注意该数组的第1个元素为空。这是因为DAY_OF_WEEK字段值的范围是从1到7,而数组元素的引用范围则是从0到6。在数组开头加一个空元素就可以保证DAY_OF_WEEK字段的值和数组引用相匹配了。

找出周末
为了找出某天是否正好是星期天或者星期六可以编写以下代码:
int day = cal.get(cal.DAY_OF_WEEK);
if(day == 6 || day == 7)
{
//执行与周末有关的操作
}
工作日

现在我们需要计算出某个月内的工作日天数。用户输入日期(参看index.jsp)之后把参数发送给处理页面(参看display.jsp)。在处理页面上,我们把Calendar对象设置为该月的第1天。
cal.clear();
cal.set(curYear, curMonth , 1);
int maxDays = cal.getActualMaximum(cal.DATE);
out.print("〈br〉Number of days in month: " + maxDays + "〈br〉");

我们还需要知道某个月内到底有多少天。getActualMaximum()方法返回一个整数值,该值就包含了每个月内的最多天数:2月是28天,3月是31天等等。在闰年的话2月的天数返回 29天。

一旦我们得到了每个月内的最多天数,我们就可以很方便地循环每月天数判断是否是周末或者工作一日。我们用add()方法给Calendar递增1,如程序清单A所示。

用SimpleDateFormat向用户显示日期

SimpleDateFormat处理显示日期的最常用需求,它可以用来把日期转换为特定的保存格式。你可以采用以下的导入指示符:
〈%@ page import="java.text.SimpleDateFormat" %〉

以下的代码给用户显示日期:
SimpleDateFormat formatter = new SimpleDateFormat("dd/MMM/yyyy");
out.print("〈br〉" + formatter.format(cal.getTime()) );

SimpleDateFormat对象接受一个字符串作为其对象构造器,该字符串参数包含了用户希望采用的显示格式。这个格式字符串可以包含额外的格式字符串,比如空格(“ ”)、反斜线( “/”)和破折号(“-”)。

表A列出了所有有效的(常用的)显示格式。

表A

格式
示例

“dd/MMM/yyyy”
06/Mar/1974

"dd-MM-yyyy"
06-03-1974

"dd MMMMMMMMM yyyy"
06 March 1974

"EEEEEEEEE, MMMMMMMMM dd, yyyy"
Wednesday, March 06, 1974

有效的SimpleDateFormat显示格式

表B是SimpleDateFormat参数的缩略语表。

表B

y
year

M
month in year

d
day in month

D
day in year

w
week in year

W
week in month

E
day in week

SimpleDateFormat参数

重用代码--FormatTitle

在同一页面上实施多种格式转换有个简单方法:在Declaration元素中是声明FormatTitle方法,它接受两个参数,一个引用Calendar对象,另一个返回格式。
〈%!
public String FormatTitle(Calendar fCal, String format)
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return (formatter.format(fCal.getTime() ));
}
%〉

为了显示日期,我们调用FormatTitle()并为其传递Calendar和格式字符串参数。
〈%=FormatTitle(cal, “dd-MMM-yyyy”)%〉

小结

学完以上的简单教程,相信你现在应该能用Calendar和SimpleDateFormat对象操作和显示日期了。

add()和set()方法可以轻松配置Calendar,促使你可以为商业应用程序遍历月份和年数。FormatTitle方法可以大大简化给用户显示日期的任务,同样的,它还简化了把日期转换为字符串的操作,而这一操作主要应用在数据库和XML文档的数据保存方面。




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: