本文目錄一覽:
- 1、java里怎麼自定義一個日期!
- 2、java如何創建一個指定的日期對象?
- 3、Java中Data類如何創建一個日期對象
- 4、如何用java創建一個1990年1月1日 00:00:00的Date對象
- 5、求解JAVA題,創建一個Date類,類中有年,月,日3個成員變量,要求實現以下功能
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的對比圖:
新API的示例代碼:
public class TimeIntroduction {
public static void testClock() throws InterruptedException {
//時鐘提供給我們用於訪問某個特定 時區的 瞬時時間、日期 和 時間的。
Clock c1 = Clock.systemUTC(); //系統默認UTC時鐘(當前瞬時時間 System.currentTimeMillis())
System.out.println(c1.millis()); //每次調用將返回當前瞬時時間(UTC)
Clock c2 = Clock.systemDefaultZone(); //系統默認時區時鐘(當前瞬時時間)
Clock c31 = Clock.system(ZoneId.of(“Europe/Paris”)); //巴黎時區
System.out.println(c31.millis()); //每次調用將返回當前瞬時時間(UTC)
Clock c32 = Clock.system(ZoneId.of(“Asia/Shanghai”));//上海時區
System.out.println(c32.millis());//每次調用將返回當前瞬時時間(UTC)
Clock c4 = Clock.fixed(Instant.now(), ZoneId.of(“Asia/Shanghai”));//固定上海時區時鐘
System.out.println(c4.millis());
Thread.sleep(1000);
System.out.println(c4.millis()); //不變 即時鐘時鐘在那一個點不動
Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相對於系統默認時鐘兩秒的時鐘
System.out.println(c1.millis());
System.out.println(c5.millis());
}
public static void testInstant() {
//瞬時時間 相當於以前的System.currentTimeMillis()
Instant instant1 = Instant.now();
System.out.println(instant1.getEpochSecond());//精確到秒 得到相對於1970-01-01 00:00:00 UTC的一個時間
System.out.println(instant1.toEpochMilli()); //精確到毫秒
Clock clock1 = Clock.systemUTC(); //獲取系統UTC默認時鐘
Instant instant2 = Instant.now(clock1);//得到時鐘的瞬時時間
System.out.println(instant2.toEpochMilli());
Clock clock2 = Clock.fixed(instant1, ZoneId.systemDefault()); //固定瞬時時間時鐘
Instant instant3 = Instant.now(clock2);//得到時鐘的瞬時時間
System.out.println(instant3.toEpochMilli());//equals instant1
}
public static void testLocalDateTime() {
//使用默認時區時鐘瞬時時間創建 Clock.systemDefaultZone() –即相對於 ZoneId.systemDefault()默認時區
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
//自定義時區
LocalDateTime now2 = LocalDateTime.now(ZoneId.of(“Europe/Paris”));
System.out.println(now2);//會以相應的時區顯示日期
//自定義時鐘
Clock clock = Clock.system(ZoneId.of(“Asia/Dhaka”));
LocalDateTime now3 = LocalDateTime.now(clock);
System.out.println(now3);//會以相應的時區顯示日期
//不需要寫什麼相對時間 如java.util.Date 年是相對於1900 月是從0開始
//2013-12-31 23:59
LocalDateTime d1 = LocalDateTime.of(2013, 12, 31, 23, 59);
//年月日 時分秒 納秒
LocalDateTime d2 = LocalDateTime.of(2013, 12, 31, 23, 59, 59, 11);
//使用瞬時時間 + 時區
Instant instant = Instant.now();
LocalDateTime d3 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
System.out.println(d3);
//解析String—LocalDateTime
LocalDateTime d4 = LocalDateTime.parse(“2013-12-31T23:59”);
System.out.println(d4);
LocalDateTime d5 = LocalDateTime.parse(“2013-12-31T23:59:59.999”);//999毫秒 等價於999000000納秒
System.out.println(d5);
//使用DateTimeFormatter API 解析 和 格式化
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(“yyyy/MM/dd HH:mm:ss”);
LocalDateTime d6 = LocalDateTime.parse(“2013/12/31 23: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());
//時間增減
LocalDateTime d7 = d6.minusDays(1);
LocalDateTime d8 = d7.plus(1, IsoFields.QUARTER_YEARS);
//LocalDate 即年月日 無時分秒
//LocalTime即時分秒 無年月日
//API和LocalDateTime類似就不演示了
}
public static void testZonedDateTime() {
//即帶有時區的date-time 存儲納秒、時區和時差(避免與本地date-time歧義)。
//API和LocalDateTime類似,只是多了時差(如2013-12-20T10:35:50.711+08:00[Asia/Shanghai])
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now);
ZonedDateTime now2 = ZonedDateTime.now(ZoneId.of(“Europe/Paris”));
System.out.println(now2);
//其他的用法也是類似的 就不介紹了
ZonedDateTime z1 = ZonedDateTime.parse(“2013-12-31T23:59:59Z[Europe/Paris]”);
System.out.println(z1);
}
public static void testDuration() {
//表示兩個瞬時時間的時間段
Duration d1 = 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()
Duration d2 = Duration.ofDays(1);
System.out.println(d2.toDays());
}
public static void testChronology() {
//提供對java.util.Calendar的替換,提供對年曆系統的支持
Chronology c = HijrahChronology.INSTANCE;
ChronoLocalDateTime d = c.localDateTime(LocalDateTime.now());
System.out.println(d);
}
/**
* 新舊日期轉換
*/
public static void testNewOldDateConversion(){
Instant instant=new Date().toInstant();
Date date=Date.from(instant);
System.out.println(instant);
System.out.println(date);
}
public static void main(String[] args) throws InterruptedException {
testClock();
testInstant();
testLocalDateTime();
testZonedDateTime();
testDuration();
testChronology();
testNewOldDateConversion();
}
}
java如何創建一個指定的日期對象?
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws ParseException {
//獲得2009年06月01日 的Date對象
DateFormat dateFormat1 = new SimpleDateFormat(“yyyy-MM-dd”);
Date myDate1 = dateFormat1.parse(“2009-06-01”);
System.out.println(myDate1);
//獲得2010年9月13日22點36分01秒 的Date對象
DateFormat dateFormat2 = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date myDate2 = dateFormat2.parse(“2010-09-13 22:36:01”);
System.out.println(myDate2);
}
}
Java中Data類如何創建一個日期對象
這個指的是調用了data的初始化方法。
data
data
=
new
date();
這樣是創建了一個date對象,它的空構造方法可能進行了一些默認的初始化動作,例如給內部的變量賦值等等,initial這個方法可能是另一種初始化其他對象的方法,其實和我們平時寫的方法是一樣的
如何用java創建一個1990年1月1日 00:00:00的Date對象
Calendar calendar = GregorianCalendar.getInstance();
calendar.set(Calendar.YEAR, 1900);
calendar.set(Calendar.MONTH, Calendar.JANUARY);
calendar.set(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
Date day = calendar.getTime();
用Calendar吧,date的set方法已經不推薦使用了
求解JAVA題,創建一個Date類,類中有年,月,日3個成員變量,要求實現以下功能
package arraylist;
public class Date
{
private int year;
private int month;
private int day;
public Date(int year, int month, int day)
{
this.setYear(year);
this.setMonth(month);
this.setDay(day);
}
public void setDate(int year, int month, int day)
{
this.setYear(year);
this.setMonth(month);
this.setDay(day);
}
public int getYear()
{
return year;
}
public void setYear(int year)
{
if (year 0 year 2015)
{
this.year = year;
}
else
{
year = -1;
}
}
public int getMonth()
{
return month;
}
public void setMonth(int month)
{
if (month 0 month = 12)
{
this.month = month;
}
else
{
month = -1;
}
}
public int getDay()
{
return day;
}
public void setDay(int day)
{
if (day = 1 day = 31)
{
this.day = day;
}
else
{
day = -1;
}
}
public void addOneDay()
{
switch (this.getMonth())
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (this.getDay() != 31)
{
this.setDay(this.getDay() + 1);
}
else
{
if (this.getMonth() == 12)
{
this.setYear(this.getYear() + 1);
this.setMonth(1);
this.setDay(1);
}else{
this.setMonth(this.getMonth() + 1);
this.setDay(1);
}
}
break;
case 4:
case 6:
case 9:
case 11:
if (this.getDay() != 30)
{
this.setDay(this.getDay() + 1);
}
else
{
this.setMonth(this.getMonth() + 1);
this.setDay(1);
}
break;
case 2:
if (this.getYear() % 4 == 0 this.getYear() % 100 != 0 || this.getYear() % 400 == 0)
{
if (this.getDay() != 29)
{
this.setDay(this.getDay() + 1);
}
else
{
this.setMonth(this.getMonth() + 1);
this.setDay(1);
}
}else{
if (this.getDay() != 28)
{
this.setDay(this.getDay() + 1);
}
else
{
this.setMonth(this.getMonth() + 1);
this.setDay(1);
}
}
}
}
public void display(){
System.out.println(“你需要的日期是” + this.getYear() + “年” + this.getMonth() + “月” + this.getDay() + “日”);
}
public static void main(String [] args){
Date d = new Date(1999, 11, 30);
d.display();
d.addOneDay();
d.display();
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/285946.html