A. 全網最全!徹底弄透java處理GMT-UTC日期時間
全網最全!徹底弄透Java處理GMT/UTC日期時間
在編程工作中,時間處理經常是遇到的一大挑戰。本文將帶你深入了解Java中如何實現和操作格林威治標准時間(GMT)和協調世界時間(UTC)。
在JDK中,處理日期/時間主要依賴於兩套API:JDK 1.0的`java.util.Date`和JDK 8之後引入的JSR 310日期時間API。本文將分別對這兩套API進行講解。
**Date類型實現**
`java.util.Date`在JDK 1.0版本中就已存在,用於表示日期 + 時間。盡管年代久遠,存在諸多問題,但由於其長久的歷史和廣泛的應用,`Date`類依然擁有龐大的用戶群。
通過一個示例,我們可以看到`Date`類的輸出結果包含了標準的UTC時間、本地時間以及格林威治時間。`java.text.DateFormat`類用於格式化日期時間。
**時區/偏移量TimeZone**
在JDK 8之前,Java使用`java.util.TimeZone`表示時區和偏移量。通過`TimeZone.getDefault()`可以獲取當前JVM的默認時區。若需獲取其他時區,可以通過`TimeZone.getTimeZone()`方法實現。
在跨時區轉換時,可以使用`TimeZone`類的時區ID來獲取指定時區的時間。注意,時區ID具有穩定性,而偏移量則可能在某些國家/地區因夏令時的調整而變化。
**ZoneId與ZoneOffset**
在JDK 8中,引入了`java.time.ZoneId`和`java.time.ZoneOffset`來表示時區和偏移量。`ZoneId`提供了一個統一的時區表示方式,而`ZoneOffset`則用於表示特定時間與格林威治標准時間之間的時差。
為了減少夏令時對時間處理的復雜性,使用`ZoneId`可以更好地處理不同國家/地區的夏令時規則。而`ZoneOffset`則提供了固定的時差表示,適用於沒有夏令時的地區。
**JSR 310類型**
考慮到`Date`類的局限性,Java 8引入了JSR 310日期時間API,包括`LocalDate`、`LocalTime`、`LocalDateTime`等類,以及`ZonedDateTime`和`OffsetDateTime`等帶時區的日期時間表示。
JSR 310提供了對日期和時間的分離表示,使得時間和時區的管理更加靈活和直觀。通過這些API,可以方便地實現跨時區的時間轉換和顯示。
**總結**
本文詳細介紹了Java中處理GMT和UTC日期時間的多個方面,包括使用`Date`類的基本操作、`TimeZone`和`ZoneId`的使用、JSR 310日期時間API的特性等。
為了簡化時間處理,推薦在項目中棄用`Date`類,轉而使用JSR 310日期時間API,這將帶來更強大、更靈活的日期時間處理能力,同時也減少了許多歷史遺留問題和復雜性。
B. java請問2次調用獲取系統時間的方法,理論上有可能一樣嗎,我要用來生成md5碼
public class my {
public static void main(String[] args){
for(int i=0;i<100;i++){
long time=System.currentTimeMillis();
System.out.println(time);
}
}
}
剛試了一下,連續執行100次,取得的時間都是一樣的,因為你取得的系統時間最小單位是毫秒,也就是在1毫秒以內做的動作,系統都會認為是同一時間點發生的,也就是時間是相等的。而java虛擬機的執行速度是極快的,它在1毫秒內執行了100次的取得系統時間,所以取得的時間是一樣的。當然你如果不是連續取得系統時間,而是在1毫秒以外取得,那取得的系統時間就自然不一樣了。希望對你有所幫助。
C. java代碼怎樣獲取internet標准時間
獲取internet標准時間,參考以下代碼:
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));//時區設置
URLurl=newURL("
);//取得資源對象
URLConnectionuc=url.openConnection();//生成連接對象
uc.connect();//發出連接
longld=uc.getDate();//取得網站日期時間(時間戳)
Datedate=newDate(ld);//轉換為標准時間對象
//分別取得時間中的小時,分鍾和秒,並輸出
System.out.print(date.getHours()+"時"+date.getMinutes()+"分"+date.getSeconds()+"秒");
D. java怎麼獲取當前系統時間並寫進mysql資料庫,如下:獲取得到的時間跟系統不一樣,不知道為什麼求指教
new Date(0)改成new Date()
new Date()是系統時間,
Date()
分配 Date 對象並初始化此對象,以表示分配它的時間(精確到毫秒)。
它的實際代碼是:
public Date()
{
this(System.currentTimeMillis()); //可以看出他也是調用的Date(long date)構造函數,傳入的參數是System.currentTimeMillis()),從1970..到現在的毫秒數
}
new Date(0)是距離1970年1月1日 n毫秒的日期,api說明:
Date(long date)
分配 Date 對象並初始化此對象,以表示自從標准基準時間(稱為「歷元(epoch)」,即 1970 年 1 月 1 日 00:00:00 GMT)以來的指定毫秒數。
E. java中的時區設置
java中的時區設置方法如下:
工具:聯想筆記本電腦e460、Windows10系統、JavaIDE2.0、谷歌瀏覽器12.0.8。
1、首先我們打開所用Tomcat的目錄。
F. java中如何獲得當前時間並輸出:時,分,秒,
import java.util.*;
import java.text.*;
public class TimeTest {
///詳細見java.util.SimpleDateFormat;
///java.util.Calendar;
//裡面有get(xxFIELD);方法很方便就獲取了時,分,秒,毫秒等數值
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");//時:分:秒.毫秒
GregorianCalendar gc = new GregorianCalendar();
System.out.println(sdf.format(gc.getTime()));
////////////////增加2分鍾
gc.add(GregorianCalendar.MINUTE, 2);
System.out.println(sdf.format(gc.getTime()));
}
}