㈠ javaWeb的實體類定義中一般日期定義成什麼格式
前後端交流數據,我建議的是,大家都統一成時間戳.
如果是string,或者Date,不好統一.
每個前端的日期格式不一樣,可能A頁面傳過來的是2020-10-10 12:00 GTM+8之類的.
B頁面傳過來的又是2020/10/10 12:00,每個人都特么不一樣.
現在很多程序員都是前後端一體開發,自己寫的可能你還會注意統一一下.但如果不是同一個人寫,有模塊之間調用,很麻煩的.你轉換器到底怎麼寫才合適?
所以我建議用時間戳,long類型的,這個大家都沒有異議,世界統一啊.
我不管你前端怎麼顯示,怎麼定義,但你要傳給我後端的時候,我只要時間戳,而我內部我怎麼定義,怎麼用,那是我的事,我傳給你前端時,也只會給你時間戳.
這樣的話,你自己開發沒問題,跟其他人對接也不會有問題.
而實體類你直接定義成Date就可以.前端傳值一個long類型的時間戳,是可以直接裝入到Date類型的,這種spring是有默認轉換器的,都不用操心.
而Date也可以直接存入資料庫中的Date,Time,TimeStamp等時間類型的.也不需要轉換.
綜上,總結下:資料庫是時間格式的(Date,Time,TimeStamp),實體是Date格式的.前端傳過來時間戳,Controller裡面直接寫實體就行.如果寫的實體里一個欄位,那也用long,然後自己new Date(long),總之跨了不同的范圍,就統一成long時間戳.
㈡ java中如何定義日期型數據
可能是你沒導入包的原因,解決方法,兩種:
1,在文件頂部導入包:import java.util.Date;
2.聲明時寫全:java.util.Date birthday;
㈢ java里怎麼自定義一個日期!
在舊版本的jdk中,Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text.SimpleDateFormat包中定義。
java.util.Date是在除了SQL語句的情況下面使用的。
java.sql.Date是針對SQL語句使用的,它只包含日期而沒有時間部分
它們都有getTime方法返回毫秒數,自然就可以直接構建。java.util.Date 是 java.sql.Date 的父類,前者是常用的表示時間的類,我們通常格式化或者得到當前時間都是用他,後者之後在讀寫資料庫的時候用他,因為PreparedStament的setDate()的第2參數和ResultSet的getDate()方法的第2個參數都是java.sql.Date。
java.sql.Date轉為java.util.Date
java.sql.Date date=new java.sql.Date();
java.util.Date d=new java.util.Date (date.getTime());
java.util.Date轉為java.sql.Date
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
java.util.Date utilDate=new Date();
java.sql.Date sqlDate=new java.sql.Date(utilDate.getTime());
java.sql.Time sTime=new java.sql.Time(utilDate.getTime());
java.sql.Timestamp stp=new java.sql.Timestamp(utilDate.getTime());
這里所有時間日期都可以被SimpleDateFormat格式化format()
SimpleDateFormat f=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
f.format(stp);
f.format(sTime);
f.format(sqlDate);
f.format(utilDate)
java.sql.Date sqlDate=java.sql.Date.valueOf(" 2005-12-12");
utilDate=new java.util.Date(sqlDate.getTime());
另類取得年月日的方法:
import java.text.SimpleDateFormat;
import java.util.*;
java.util.Date date = new java.util.Date();
//如果希望得到YYYYMMDD的格式SimpleDateFormat
sy1=new SimpleDateFormat("yyyyMMDD");
String dateFormat=sy1.format(date);
//如果希望分開得到年,月,日SimpleDateFormat
sy=new SimpleDateFormat("yyyy");
SimpleDateFormat sm=new SimpleDateFormat("MM");
SimpleDateFormat sd=new SimpleDateFormat("dd");
String syear=sy.format(date);
String smon=sm.format(date);
String sday=sd.format(date);
注意啦!!!在JAVA 8中有了日期的新的表示方式。在java.time包中。
Java 8日期/時間( Date/Time)API是開發人員最受追捧的變化之一,Java從一開始就沒有對日期時間處理的一致性方法,因此日期/時間API也是除Java核心API以外另一項倍受歡迎的內容。
為什麼我們需要新的Java日期/時間API?
在開始研究Java 8日期/時間API之前,讓我們先來看一下為什麼我們需要這樣一個新的API。在Java中,現有的與日期和時間相關的類存在諸多問題,其中有:
1. Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text包中定義。
2. java.util.Date同時包含日期和時間,而java.sql.Date僅包含日期,將其納入java.sql包並不合理。另外這兩個類都有相同的名字,這本身就是一個非常糟糕的設計。
3. 對於時間、時間戳、格式化以及解析,並沒有一些明確定義的類。對於格式化和解析的需求,我們有java.text.DateFormat抽象類,但通常情況下,SimpleDateFormat類被用於此類需求。
4. 所有的日期類都是可變的,因此他們都不是線程安全的,這是Java日期類最大的問題之一。
5. 日期類並不提供國際化,沒有時區支持,因此Java引入了java.util.Calendar java.util.TimeZone類,但他們同樣存在上述所有的問題。
在現有的日期和日歷類中定義的方法還存在一些其他的問題,但以上問題已經很清晰地表明:Java需要一個健壯的日期/時間類。這也是為什麼Joda Time在Java日期/時間需求中扮演了高質量替換的重要角色。
Java 8日期/時間API是JSR-310的實現,它的實現目標是克服舊的日期時間實現中所有的缺陷,新的日期/時間API的一些設計原則是:
1. 不變性:新的日期/時間API中,所有的類都是不可變的,這對多線程環境有好處。
2. 關注點分離:新的API將人可讀的日期時間和機器時間(unix timestamp)明確分離,它為日期(Date)、時間(Time)、日期時間(DateTime)、時間戳(unix timestamp)以及時區定義了不同的類。
3. 清晰:在所有的類中,方法都被明確定義用以完成相同的行為。舉個例子,要拿到當前實例我們可以使用now()方法,在所有的類中都定義了format()和parse()方法,而不是像以前那樣專門有一個獨立的類。為了更好的處理問題,所有的類都使用了工廠模式和策略模式,一旦你使用了其中某個類的方法,與其他類協同工作並不困難。
4. 實用操作:所有新的日期/時間API類都實現了一系列方法用以完成通用的任務,如:加、減、格式化、解析、從日期/時間中提取單獨部分,等等。
5. 可擴展性:新的日期/時間API是工作在ISO-8601日歷系統上的,但我們也可以將其應用在非IOS的日歷上。
Java日期/時間API包含以下相應的包。
1. java.time包:這是新的Java日期/時間API的基礎包,所有的主要基礎類都是這個包的一部分,如:LocalDate, LocalTime, LocalDateTime, Instant, Period, Duration等等。所有這些類都是不可變的和線程安全的,在絕大多數情況下,這些類能夠有效地處理一些公共的需求。
2. java.time.chrono包:這個包為非ISO的日歷系統定義了一些泛化的API,我們可以擴展AbstractChronology類來創建自己的日歷系統。
3. java.time.format包:這個包包含能夠格式化和解析日期時間對象的類,在絕大多數情況下,我們不應該直接使用它們,因為java.time包中相應的類已經提供了格式化和解析的方法。
4. java.time.temporal包:這個包包含一些時態對象,我們可以用其找出關於日期/時間對象的某個特定日期或時間,比如說,可以找到某月的第一天或最後一天。你可以非常容易地認出這些方法,因為它們都具有「withXXX」的格式。
5. java.time.zone包:這個包包含支持不同時區以及相關規則的類。
新舊API的對比圖:
publicclassTimeIntroction{
publicstaticvoidtestClock()throwsInterruptedException{
//時鍾提供給我們用於訪問某個特定時區的瞬時時間、日期和時間的。
Clockc1=Clock.systemUTC();//系統默認UTC時鍾(當前瞬時時間System.currentTimeMillis())
System.out.println(c1.millis());//每次調用將返回當前瞬時時間(UTC)
Clockc2=Clock.systemDefaultZone();//系統默認時區時鍾(當前瞬時時間)
Clockc31=Clock.system(ZoneId.of("Europe/Paris"));//巴黎時區
System.out.println(c31.millis());//每次調用將返回當前瞬時時間(UTC)
Clockc32=Clock.system(ZoneId.of("Asia/Shanghai"));//上海時區
System.out.println(c32.millis());//每次調用將返回當前瞬時時間(UTC)
Clockc4=Clock.fixed(Instant.now(),ZoneId.of("Asia/Shanghai"));//固定上海時區時鍾
System.out.println(c4.millis());
Thread.sleep(1000);
System.out.println(c4.millis());//不變即時鍾時鍾在那一個點不動
Clockc5=Clock.offset(c1,Duration.ofSeconds(2));//相對於系統默認時鍾兩秒的時鍾
System.out.println(c1.millis());
System.out.println(c5.millis());
}
publicstaticvoidtestInstant(){
//瞬時時間相當於以前的System.currentTimeMillis()
Instantinstant1=Instant.now();
System.out.println(instant1.getEpochSecond());//精確到秒得到相對於1970-01-0100:00:00UTC的一個時間
System.out.println(instant1.toEpochMilli());//精確到毫秒
Clockclock1=Clock.systemUTC();//獲取系統UTC默認時鍾
Instantinstant2=Instant.now(clock1);//得到時鍾的瞬時時間
System.out.println(instant2.toEpochMilli());
Clockclock2=Clock.fixed(instant1,ZoneId.systemDefault());//固定瞬時時間時鍾
Instantinstant3=Instant.now(clock2);//得到時鍾的瞬時時間
System.out.println(instant3.toEpochMilli());//equalsinstant1
}
(){
//使用默認時區時鍾瞬時時間創建Clock.systemDefaultZone()-->即相對於ZoneId.systemDefault()默認時區
LocalDateTimenow=LocalDateTime.now();
System.out.println(now);
//自定義時區
LocalDateTimenow2=LocalDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println(now2);//會以相應的時區顯示日期
//自定義時鍾
Clockclock=Clock.system(ZoneId.of("Asia/Dhaka"));
LocalDateTimenow3=LocalDateTime.now(clock);
System.out.println(now3);//會以相應的時區顯示日期
//不需要寫什麼相對時間如java.util.Date年是相對於1900月是從0開始
//2013-12-3123:59
LocalDateTimed1=LocalDateTime.of(2013,12,31,23,59);
//年月日時分秒納秒
LocalDateTimed2=LocalDateTime.of(2013,12,31,23,59,59,11);
//使用瞬時時間+時區
Instantinstant=Instant.now();
LocalDateTimed3=LocalDateTime.ofInstant(Instant.now(),ZoneId.systemDefault());
System.out.println(d3);
//解析String--->LocalDateTime
LocalDateTimed4=LocalDateTime.parse("2013-12-31T23:59");
System.out.println(d4);
LocalDateTimed5=LocalDateTime.parse("2013-12-31T23:59:59.999");//999毫秒等價於999000000納秒
System.out.println(d5);
//使用DateTimeFormatterAPI解析和格式化
DateTimeFormatterformatter=DateTimeFormatter.ofPattern("yyyy/MM/ddHH:mm:ss");
LocalDateTimed6=LocalDateTime.parse("2013/12/3123:59:59",formatter);
System.out.println(formatter.format(d6));
//時間獲取
System.out.println(d6.getYear());
System.out.println(d6.getMonth());
System.out.println(d6.getDayOfYear());
System.out.println(d6.getDayOfMonth());
System.out.println(d6.getDayOfWeek());
System.out.println(d6.getHour());
System.out.println(d6.getMinute());
System.out.println(d6.getSecond());
System.out.println(d6.getNano());
//時間增減
LocalDateTimed7=d6.minusDays(1);
LocalDateTimed8=d7.plus(1,IsoFields.QUARTER_YEARS);
//LocalDate即年月日無時分秒
//LocalTime即時分秒無年月日
//API和LocalDateTime類似就不演示了
}
(){
//即帶有時區的date-time存儲納秒、時區和時差(避免與本地date-time歧義)。
//API和LocalDateTime類似,只是多了時差(如2013-12-20T10:35:50.711+08:00[Asia/Shanghai])
ZonedDateTimenow=ZonedDateTime.now();
System.out.println(now);
ZonedDateTimenow2=ZonedDateTime.now(ZoneId.of("Europe/Paris"));
System.out.println(now2);
//其他的用法也是類似的就不介紹了
ZonedDateTimez1=ZonedDateTime.parse("2013-12-31T23:59:59Z[Europe/Paris]");
System.out.println(z1);
}
publicstaticvoidtestDuration(){
//表示兩個瞬時時間的時間段
Durationd1=Duration.between(Instant.ofEpochMilli(System.currentTimeMillis()-12323123),Instant.now());
//得到相應的時差
System.out.println(d1.toDays());
System.out.println(d1.toHours());
System.out.println(d1.toMinutes());
System.out.println(d1.toMillis());
System.out.println(d1.toNanos());
//1天時差類似的還有如ofHours()
Durationd2=Duration.ofDays(1);
System.out.println(d2.toDays());
}
(){
//提供對java.util.Calendar的替換,提供對年歷系統的支持
Chronologyc=HijrahChronology.INSTANCE;
ChronoLocalDateTimed=c.localDateTime(LocalDateTime.now());
System.out.println(d);
}
/**
*新舊日期轉換
*/
(){
Instantinstant=newDate().toInstant();
Datedate=Date.from(instant);
System.out.println(instant);
System.out.println(date);
}
publicstaticvoidmain(String[]args)throwsInterruptedException{
testClock();
testInstant();
testLocalDateTime();
testZonedDateTime();
testDuration();
testChronology();
testNewOldDateConversion();
}
}
㈣ 用Java做的 定義一個時間類型(類名MyTime) 定義名為Mytime類,其中應有三個整形
packageDemo;
publicclassMyTime{
privateinthour,minute,second;
publicMyTime(inthour,intminute,intsecond){
super();
this.hour=hour;
this.minute=minute;
this.second=second;
}
publicvoidaddSecond(intsec){
second+=sec;
}
publicvoidaddMinute(intmin){
minute+=min;
}
publicvoidaddHour(inthou){
hour+=hou;
}
publicvoidsubSecond(intsec){
second-=sec;
}
publicvoidsubMinute(intmin){
minute-=min;
}
publicvoidsubHour(inthou){
hour-=hou;
}
publicvoiddiaplay(){
System.out.println(hour+"時"+minute+"分"+second+"秒");
}
}
㈤ java程序定義一個日期類
正好我這有一個日期的工具類,你參考一下。我是直接黏貼進來的,看起來感覺有點亂,你復制後放到eclipse里看就整齊了。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.junit.Test;
/**
* @author Administrator
* 各種日期、時間轉換的示例總結:
*/
public class DateFormatUtil {
/**
* 將當前時間轉換成指定格式的日期形式的字元串輸出
* */
@Test
public void dateToStr(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = sdf.format(new Date());
System.out.println(dateString);
}
/**
* 將給定時間格式的字元串,解析成Date輸出
* @throws ParseException
* */
@Test
public void strToDate() throws ParseException{
String str = "201012241002";//yyyyMMddhhmm
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmm");
Date date = sdf.parse(str);
System.out.println(date);
}
/**
* 字元串,格式化 為指定字元串
* @throws ParseException
*/
@Test
public void formatstr()throws ParseException{
String str = "20170314155847";//yyyyMMddhhmm
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str2 = sdf2.format(sdf.parse(str));
System.out.println(str2);
}
/**
* 操作時間:當前時間減去一天,一月,一年
*/
@Test
public void oprateDate(){
Date date = new Date();//獲取當前時間
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
// calendar.add(Calendar.YEAR, -1);//當前時間減去一年,即一年前的時間
// calendar.add(Calendar.MONTH, -1);//當前時間前去一個月,即一個月前的時間
calendar.add(Calendar.DATE, -1);
Date time = calendar.getTime();//獲取一年前的時間,或者一個月前的時間
System.out.println(time);
}
}
㈥ 用java定義一個日期類,急!!!
class MyDate{
public int year,month,day;
public MyDate(MyDate date){
year=date.year;
month=date.month;
day=date.day;
}
public boolean isLeapYear(){
return (((year%4==0)&&(year%100!=0))||(year%400==0));
}
public MyDate(int y,int m,int d){
year=y;
month=m;
day=d;
if(((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))&&((day<1)||(day>31))) System.out.println("wrong date");
if(((month==4)||(month==6)||(month==9)||(month==11))&&((day<1)||(day>30))) System.out.println("wrong date");
if(month==2){
if(isLeapYear()&&((day<1)||(day>29))) System.out.println("wrong date");
if(!isLeapYear()&&((day<1)||(day>28))) System.out.println("wrong date");
}
}
public boolean equal(MyDate date){
return (year==date.year && month==date.month && day==date.day);
}
public void incrementDay(){
if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)){
int flag=0;
if(day==31){month+=1;flag=1;}
if((day<=30)&&(day>=1)){day+=1;}
if(flag==1) day=1;
flag=0;
}
if((month==4)||(month==6)||(month==9)||(month==11)){
int flag=0;
if(day==30){month+=1;flag=1;}
if((day<=29)&&(day>=1)){day+=1;}
if(flag==1) day=1;
flag=0;
}
if(month==12){
int flag=0;
if(day==31){year+=1;month=1;flag=1;}
if((day>=1)&&(day<=30)){day+=1;}
if(flag==1) day=1;
flag=0;
}
if(month==2){
int flag=0;
if(isLeapYear()){
if(day==29){month+=1;flag=1;}
if((day<=28)&&(day>=1)){day+=1;}
if(flag==1) day=1;
flag=0;
}
else{
if(day==28){month+=1;flag=1;}
if((day<=27)&&(day>=1)){day+=1;}
if(flag==1) day=1;
flag=0;
}
}
}
public int getYear(){
return year;
}
public int getMonth(){
return month;
}
public int getDay(){
return day;
}
public String toString(){
return (year+"-"+month+"-"+day);
}
}
public class Mytest{
public static void main(String[] test){
MyDate date1=new MyDate(2000,2,28);
MyDate date2=new MyDate(2006,12,31);
MyDate date3=new MyDate(date2);
System.out.println(date3.equal(date2));
date1.incrementDay();
System.out.println(date1.getYear()+" "+date1.getMonth()+" "+date1.getDay());
System.out.println(date1.toString());
date2.incrementDay();
System.out.println(date2.getYear()+" "+date2.getMonth()+" "+date2.getDay());
System.out.println(date2.toString());
}
}
㈦ Java 定義一個Date類
設計一個日期類MyDate,包含一個構造方法,3個私有成員變數year、month、day以及它們相應的setter和getter方法,再加上一個轉換成「XXXX年XX月XX日」格式字元串的方法toString。...
設計一個日期類MyDate,包含一個構造方法,3個私有成員變數year、month、day以及它們相應的setter和getter方法,再加上一個轉換成「XXXX年XX月XX日」格式字元串的方法toString。
㈧ 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。
㈨ 用Java做的 定義一個時間類型(類名MyTime)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class MyTime {
public String hour;
public String minute;
public String second;
public MyTime() {
hour = "00";
minute = "00";
second = "00";
}
public MyTime(String hour, String minute, String second) {
this.hour = hour;
this.minute = minute;
this.second = second;
}
public MyTime TimeAdd(MyTime t) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");// 定義格式
String str1 = t.toString();// 時間字元串
String str2 = this.toString();// 時間字元串
Date date1 =null;
Date date2 =null;
try {// 構造時間字元串
date1= format.parse(str1);
} catch (ParseException e) {
date1 = new Date();//如果出錯為00:00:00
date1.setHours(0);
date1.setMinutes(0);
date1.setSeconds(0);
}
try {
date2= format.parse(str2);
} catch (ParseException e) {// 構造時間字元串
date2 = new Date();//如果出錯為00:00:00
date2.setHours(0);
date2.setMinutes(0);
date2.setSeconds(0);
}
TimeZone tz = TimeZone.getTimeZone("+0800");
Calendar c1=Calendar.getInstance();
c1.setTimeZone(tz);
c1.setTime(date1);//轉成Calendar類型方便計算
Calendar c2=Calendar.getInstance();
c2.setTimeZone(tz);
c2.setTime(date2);//轉成Calendar類型方便計算
String str= format.format(c1.getTimeInMillis()+c2.getTimeInMillis());
System.out.println(str);
return StrToTime(str);//返回時間
}
public MyTime StrToTime(String str) {
SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
try {
format.parse(str);
return new MyTime(str.substring(0, 2), str.substring(2, 4), str
.substring(4, 6));
} catch (Exception e) {
return new MyTime("00", "00", "00");
}
}
public String toString() {
return hour + ":" + minute + ":" + second;
}
public static void main(String[] args) {
MyTime myTime=new MyTime("01","05","05");
MyTime myTime2=new MyTime("02","02","01");
myTime.TimeAdd(myTime2);
}
}
相加方法小時有問題,是時區問題,不影響
㈩ java里表示時間的類型是什麼
java.util.Date,和java.util.Calendar 是 java 的主要的時間類型
Java.util.Calendar類是java.util.Date類的一個更加深入,更加全面的替代。Java.util.Calendar類支持java.util.Date的所有功能,此外,Calendar還引入了多語言,多區域的特性,可以根據需要獲取不同區域,不同時區的時間,Calendar還增加了比Date更加方便和快捷的許多操作,如獲取一年當中的第幾個星期,各個月的天數等便捷的方法。
Java.util.Calendar區別與java.util.Date的幾個地方也需要注意一下:首先,Calendar增加了毫秒的時間段,通過它可以獲取時間點的毫秒值,而java.util.Date只是精確到秒。其次,Calendar過去年的時候是當前年份比如:2010,而Date獲取年份的時獲取到的是當前年份-1900的一個值(2010-1900=110,因此,你調用getYear後過去的值就是110)。最後Calendar是一個抽象類,之所以能夠實例化,是因為此處的Calendar充當了一個類似於工廠的作用,在getInstance方法中實例化了Calendar子類GregorianCalendar,並把它返回給客戶使用。
此外,還有 java.sql.Date, java.sql.Time, java.sql.Timestamp