java中的date
❶ java語言中的date類及方法的用法
Date和Calendar是Java類庫里提供對時間進行處理的類,由於日期在商業邏輯的應用中占據著很重要的地位,所以在這里想對這兩個類進行一個基本的講解,由於技術有限,不到之處請指正。
Date類顧名思義,一看就知道是和日期有關的類了,這個類最主要的作用就是獲得當前時間了,然而這個類裡面也具有設置時間以及一些其他的功能,可是由於本身設計的問題,這些方法卻遭到眾多批評,而這些遭受批評的功能都已移植到另外一個類裡面,這就是今天要講到的第二個類Calendar裡面。
在講兩個類之前,這里又不能不多提一個類,那就是DateFormat類,這個類是用來格式化日期的,稍後也會講到。
首先,讓我們來看一個獲取當前時間的例子:
Date date = new Date();
System.out.println(date.getTime());上面的語句首先創建了Date的一個對象,接著使用getTime方法獲得當前的時間,但是注意了,輸出後的結果確實一串長整型的數字,這是為什麼?實際上這是系統根據當前時間計算出來的一個long型的數,至於是如何計算出來的就不在本文中講述了,那既然這樣的話又如何顯示正確的時間呢?這就要利用到上面的DateFormat類了,這個類是一個基類,它有一個子類是SimpleDateFormat,具體用法請看下面的代碼:
Date date = new Date();
SimpleDateFormat dateFm = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
System.out.println(dateFm.format(date));這段代碼開始創建了一個Date的對象,用來獲取當前時間,而重點就在於後面的SimpleDateFormat對象,這個對繼承了DateFormat,利用format方法對Date對象進行格式化,然後輸出,而格式的定製是由用戶定製的,EEEE代表星期,MMMM代表月份,而dd代表日,yyyy代表年。使用這個方法就可以根據用戶自定義的格式進行輸出時間。
上面介紹了由用戶自定義格式的輸出時間,下面將來介紹通過JAVA類庫提供的標准格式輸出時間,這就要用到DateFormat類了,請看以下代碼:
Date date = new Date();
DateFormat dateFm = DateFormat.getDateTimeInstance(DateFormat.SHORT,
DateFormat.SHORT);
System.out.println(dateFm.format(date));這里使用的方法和用戶自定義的方法差不多,只是這里使用的是一個抽象類,由於DateFormat是一個抽象類,所以它不能通過構造函數構造對象,在這里是通過getDateTimeInstance()方法獲得該對象,而所傳遞的參數就是DateFormat裡面定義的一些常量,系統根據這些常量輸出當前時間,由於這里使用的是getDateTimeInstance方法,所以將傳遞兩個常量參數,用來分別格式化日期和當前的時間。
上面講述了如何獲得系統時間以及如何格式化輸出,那如果想獲取或者設置時間當中的某一部分又該如何呢?例如年,月,日。這就要靠Calendar這個類了,這個類也是一個抽象類,它有一個子類GregorianCalendar,接下來我會利用這個子類來演示這個過程,請看以下代碼:
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(new Date());
System.out.println("System Date: " + dateFormat.format(cal.getTime()));
cal.set(GregorianCalendar.DAY_OF_WEEK,GregorianCalendar.FRIDAY);
System.out.println("After Setting Day of Week to Friday: " +
dateFormat.format(cal.getTime()));
這段代碼當中,首先創建了一個DateFormat對象進行格式設置,接著創建了一個GregorianCalendar對象cal,接著使用cal.setTime()方法設置cal對象中的時間為當前時間,然後通過format格式化由cal.getTime()返回的時間進行輸出,後面利用set方法設置cal的日期為當前星期的FRIDAY,此時cal中存儲的時間就是這個星期五的該時刻,而後面利用format格式化輸出,假如當前時間為2005年1月27日星期4的11點30分,那麼最後將那句將會輸出2005年1月28日星期5的11點30分。
❷ java中的Date類為什麼很多方法被廢棄了
Date類中有很多方法都標有刪除線,是因為Date類在設計中有很多問題,如getYear指的是1900年以來的年數,getMonth是從0開始的。事實上,不止Date類,Java的其實時間相關類都存在設計問題,以下舉些例子,並提供解決方案。
我們通常使用 Date和Calander用作時間處理,其實會有兩個問題:
1.Date的缺陷,我們知道 Date的setYear和getYear等函數是刪除線顯示的
原因在:比如今天是2009-01-04日,那麼獲取的年竟然是109,所以是有問題的
2.Calender常常用於時間的回卷,經常使用的就是roll(Day_of_Year,-7)就是七天前
但是如果是2009-01-04日,那麼七天前是2009-12-28日,而非2008年,這是因為它只對天回卷了,年沒有回卷
3、針對這些問題,提供一套日期工具類:
import org.apache.log4j.Logger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class AdDateUtil {
private static Logger logger = Logger.getLogger(AdDateUtil.class);
static public String getNowStr(String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String now = sdf.format(new Date());
return now;
}
static public Date getFormatDate(String date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = new Date();
try {
d = sdf.parse(date);
} catch (ParseException e) {
logger.error(e);
}
return d;
}
static public String getDateStr(Date date, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
String d = sdf.format(date);
return d;
}
static public String getPadZeroString(String s, int size) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < (size - s.length()); i++) {
sb.append("0");
}
sb.append(s);
return sb.toString();
}
/**
* 得到某月的天數
*
* @param year
* @param month
* @return
*/
static public int getDayCountOfMonth(String year, String month) {
Calendar cal = Calendar.getInstance();
// 年
cal.set(Calendar.YEAR, Integer.parseInt(year));
// 月,因為Calendar里的月是從0開始,所以要-1
cal.set(Calendar.MONTH, Integer.parseInt(month) - 1);
return cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
static public String getYesterday(String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
Calendar now = Calendar.getInstance();
now.roll(Calendar.DAY_OF_YEAR, -1); //昨天
return df.format(now.getTime());
}
/**
* 獲取和今天附近的某天
* @param format
* @param diff
* @return
*/
static public String getADay(String format, int diff) {
SimpleDateFormat df = new SimpleDateFormat(format);
Calendar now = Calendar.getInstance();
int beforeM = now.get(Calendar.MONTH);
now.roll(Calendar.DAY_OF_YEAR, diff); //
int nowM = now.get(Calendar.MONTH);
//必須進行日期處理,否則2009-01-04日前七天是2009-12-28
if (nowM > beforeM) {
now.roll(Calendar.YEAR, -1);
}
return df.format(now.getTime());
}
static public String getTomorrow(String format) {
SimpleDateFormat df = new SimpleDateFormat(format);
Calendar now = Calendar.getInstance();
now.roll(Calendar.DAY_OF_YEAR, 1); //明天
return df.format(now.getTime());
}
/**
* 得到最近num天的全部日期
* 說明:
* 1.日期是從昨天開始算的.
* 2.如果num=2 , 日期是2008-03-14 ,則返回的結果為 2008-03-12、2008-03-13
* @param num
* @return
*/
public static String[] getDaysByNum(int num, String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String[] result = { };
Calendar cal = Calendar.getInstance();
cal.setTime(getDateFromString(date, "yyyy-MM-dd"));
//最近一周
result = new String[num];
for (int i = num; i > 0; i--) {
cal.add(Calendar.DAY_OF_YEAR, -1);
result[i - 1] = sdf.format(new Date(cal.getTimeInMillis()));
}
return result;
}
public static Date getDateFromString(String dateStr, String format) {
if ((dateStr == null) || (format == null)) {
try {
throw new Exception("數據類型異常" + dateStr + "|" + format);
} catch (Exception e) {
logger.error("數據類型異常:" + e);
}
}
SimpleDateFormat df = new SimpleDateFormat(format);
Date date;
try {
date = df.parse(dateStr);
return date;
} catch (Exception ex) {
logger.error(ex);
return new Date();
}
}
static public int getNowYear() {
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.YEAR);
}
static public int getNowMonth() {
Calendar cal = Calendar.getInstance();
return cal.get(Calendar.MONTH) + 1;
}
public static String[] getMonthRang(String year, String month) {
String beginDate = year + "-" + month + "-01";
String endDate = year + "-" + month + "-" +
getDayCountOfMonth(year, month);
return getDaysByRang(beginDate, endDate);
}
public static String[] getDaysByRang(String beginDate, String endDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//得到兩個日期間相差多少天
int num = dateDiff(beginDate, endDate);
if (num < 0) {
//顛倒一下日期
String tmp = beginDate;
beginDate = endDate;
endDate = tmp;
num = 0 - num;
}
String[] result = { };
Calendar cal = Calendar.getInstance();
try {
cal.setTime(sdf.parse(beginDate));
} catch (ParseException e) {
e.printStackTrace();
}
num = num + 1; //把開始和結束日期都包含進去
result = new String[num];
for (int i = 0; i < num; i++) {
if (i > 0) {
cal.add(Calendar.DAY_OF_YEAR, 1);
}
result[i] = sdf.format(new Date(cal.getTimeInMillis()));
}
return result;
}
public static int dateDiff(String beginDate, String endDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(endDate);
} catch (ParseException e) {
date = new Date();
e.printStackTrace();
}
long end = date.getTime();
try {
date = sdf.parse(beginDate);
} catch (ParseException e) {
date = new Date();
e.printStackTrace();
}
long begin = date.getTime();
long day = (end - begin) / (1000 * 3600 * 24); //除1000是把毫秒變成秒
return Integer.parseInt(Long.toString(day));
}
public static void main(String[] args) {
System.out.println(AdDateUtil.getADay("yyyy-MM-dd", -7));
}
}
❸ 在java的程序里date類型怎麼比較大小呀
有兩個方法:
方法一:
兩個Date類型的變數可以通過compareTo方法來比較。此方法的描述是這樣的:如果參數 Date 等於此 Date,則返回值 0;如果此 Date 在 Date 參數之前,則返回小於 0 的值;如果此 Date 在 Date 參數之後,則返回大於 0 的值。
(3)java中的date擴展閱讀:
Date類可以在java.util包中找到,用一個long類型的值表示一個指定的時刻。它的一個有用的構造函數是Date(),它創建一個表示創建時刻的對象。
getTime()方法返回Date對象的long值。在下面的程序中,我使用Date()構造函數創建一個表示程序運行時刻的對象,並且利用getTime()方法找到這個日期代表的毫秒數量:
import java.util.*;
public class Now {
public static void main(String[] args) {
Date now = new Date();
long nowLong = now.getTime();
System.out.println("Value is " + nowLong);
}
}
❹ java Date類型。
Data類型是日期類型,通常是為了獲取某些特定的日期或者轉換日期的格式為字元串。舉例:
Date date = new Date();//定義一個當前日期,此時輸出就是日期類型
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//創建格式日期類型
String str = sdf.format(date);//對創建的日期進行格式化輸出。此時輸出就是字元串日期類型
輸出結果:2015--6-30 19:17:32。
❺ 資料庫中的date和java中的date的區別
java.util.Date是在除了sql語句的情況下面使用的。
java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時間部分
java.sql.Date轉為java.util.Date
java.sql.Datedate=newjava.sql.Date();
java.util.Dated=newjava.util.Date(date.getTime());
java.util.Date轉為java.sql.Date
java.util.DateutilDate=newDate();
java.sql.DatesqlDate=newjava.sql.Date(utilDate.getTime());
java.util.DateutilDate=newDate();
java.sql.DatesqlDate=newjava.sql.Date(utilDate.getTime());
java.sql.TimesTime=newjava.sql.Time(utilDate.getTime());
java.sql.Timestampstp=newjava.sql.Timestamp(utilDate.getTime());
請採納,謝謝
❻ java中date類型怎麼比較大小
date 實現了Comparable 介面 調用compareTo(Date date)方法可以比較大小。
例如:比較date1 和 date2的大小
int res = date1.compareTo(date2),相等則返回0,date1大返回1,否則返回-1。
❼ java date怎樣賦值
java 中date賦值方法:
1.通過new對象獲取當前的時間復制給date;
Datedate=newDate();
2.通過SimpleDateFormat將字元串轉換為date:
SimpleDateFormatformat=newSimpleDateFormat("yyyy年MM月ddHH:mm:ss");
Datedate=format.parse(str);//str表示yyyy年MM月ddHH:mm:ss格式字元串
3.通過Calendar獲得date
Calendarcalendar=Calendar.getInstance();
Datedate=calendar.getTime();
❽ java,Date要怎麼輸入
首先get方法是獲取值,set方法是設置值,你這里是要設置值所以應該用set方法
其次你要set一個Date類型的值,Date類型的值有多種創建方式:
Datedate1=newDate();//當前時間
Datedate2=newDate(10000);//1970年1月1日之後10000毫秒時的時間
SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Datedate3=dateFormat.parse("2018-04-0621:34:55");
Calendarcalendar=Calendar.getInstance();
calendar.set(2018,3,6,21,34,55);//這里的月份從0開始,所以填3實際表示的4月份
Datedate4=calendar.getTime();
❾ java中的Date是怎麼使用的
1、代碼:System.out.println(new java.util.Date());
輸出:Thu Jan 27 14:43:28 CST 2011
2、代碼:System.out.println(new java.util.Date().toLocaleString());
輸出:2011-1-27 14:45:21
不過現在toLocaleString()方法已過時,由DateFormat.format(Date date)取代。
3、代碼:
DateFormat ddf = DateFormat.getDateInstance();
DateFormat dtf = DateFormat.getTimeInstance();
DateFormat ddtf = DateFormat.getDateTimeInstance();
Date date = new Date();
System.out.println("日期:" + ddf.format(date));
System.out.println("時間:" + dtf.format(date));
System.out.println("日期時間:" + ddtf.format(date));
SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateTimeInstance();
System.out.println("日期時間:" + sdf.format(date));
輸出:
日期:2011-2-9
時間:11:16:02
日期時間:2011-2-9 11:16:02
日期時間:2011-2-9 11:16:02
以上是在window系統下,linux系統下不能這么處理,linux系統下用以上獲取回來的初始時間格式與此不同。