關於java日期(java 定義日期)

本文目錄一覽:

java日期處理

“Thu Aug 20 12:15:10 CST 2009” 是Date默認的格式.

1.如果是把Date類型用”20090820″格式表示,可參考下面的代碼:

Date date=new Date();

df = new SimpleDateFormat(“yyyyMMdd”);

String str = df.format(date);// 獲得格式化後的日期字符串

System.err.println(str);// 打印最終結果

2.如果只是需要把一個這種類型的字符串轉化為”20090820″,可參考下面的代碼:

try {

Date date;

// 首先準備好”Thu Aug 20 12:15:10 CST 2009″的格式

// 用來將其轉化為Date對象

DateFormat df = new SimpleDateFormat(

“EEE MMM dd HH:mm:ss zzz yyyy”, Locale.US);

date = df.parse(“Thu Aug 20 12:15:10 CST 2009”);

// 創建所需的格式

df = new SimpleDateFormat(“yyyyMMdd”);

String str = df.format(date);// 獲得格式化後的日期字符串

System.err.println(str);// 打印最終結果

} catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

關於java的日期的問題

Java中Calendar.DAY_OF_WEEK其實表示:一周中的第幾天,所以他會受到 第一天是星期幾 的影響。

有些地區以星期日作為一周的第一天,而有些地區以星期一作為一周的第一天,這2種情況是需要區分的。

看下錶的返回值

星期日為一周的第一天 SUN MON TUE WED THU FRI SAT

DAY_OF_WEEK返回值 1 2 3 4 5 6 7

星期一為一周的第一天 MON TUE WED THU FRI SAT SUN

DAY_OF_WEEK返回值 1 2 3 4 5 6 7

所以Calendar.DAY_OF_WEEK需要根據本地化設置的不同而確定是否需要 “-1”

Java中設置不同地區的輸出可以使用 Locale.setDefault(Locale.地區名) 來實現

關於Java的Date日期顯示問題?

設置下時區就行了,如:

import java.util.*;

import java.text.*;

public class HelloWorld {

public static void main(String []args) {

SimpleDateFormat sdf=new SimpleDateFormat(“yyyy MM dd hh:mm:ss”);

//設置為東八區

sdf.setTimeZone(TimeZone.getTimeZone(“GMT+8”));

System.out.println(sdf.format(new Date()));

}

}

運行結果截圖如下:

JAVA 日期問題

(“yyyy-mm-dd hh24:mi:ss”) 這裡你好好看下報的什麼錯“`月份 是 MM 大寫哦“

完整的應該是 (“yyyy-MM-dd HH:mm:ss,SSS”);

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();

    }

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/252135.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-13 17:34
下一篇 2024-12-13 17:34

相關推薦

  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變量時顯示的指定變量類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論