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