探索 Java 中的 TimeZone

从透射谱到能量分布:用Rsoft破解光纤光栅耦合模式的3个关键技巧 本文面向光通信工程师与研究者,分享了利用Rsoft软件深入分析光纤光栅耦合模式的三个关键技巧。通过配置场监视器观察XY截面能量分布、利用传播动画追踪动态过程,并结合模式求解器精准判定相位匹配,帮助用户超越透射谱分析,直观可视化能量从纤芯到包层的耦合与流动,从而优化器件设计。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 探索 Java 中的 Date, Calendar, TimeZone 和Timestamp 对象

宋晟 (shengsong@hotmail.com)

2001 年 11 月

如何计时,自古以来就是一个有着各种答案的问题。中国人从习惯使用农历计时,到选择便于与世界沟通的公元计时。在生活中这两者又一起使用,这已经融入到文化中。在计算机世界里,计时也是一个丰富多采的话题。各个系统各有一套方法,例如 2000 年引起全世界关注的"千年虫",就是因为计时系统设计上的限制而产生的。那么 Java 作为一种通用编程语言和运行平台,它的计时系统是如何设计的,我们在应用程序的开发中又如何驾驭它呢?对象的状态总是要被储存起来的,那么我们又要注意哪些情况呢?

1 最常用的对象(概念最易被混逍的对象) Date
在 Java 中,如何获得系统当前的时间?恐怕一个合格的 Java 程序员可以列举出至少下面这种:
Date date = new Date();
// 打印出具体的年,月,日,小时,分钟,秒钟 以及时区
System.out.println(date);

看起来 Date 这个对象包含了相当丰富的时间信息。那么我们能不能用它来构件任何一个指定的时间呢?很多的应用程序是需要用户输入一个特定的时间。



// 我们能不能用下面的代码构件出 2001/8/8 8:8

    import java.io.*;

    import java.util.*;



    public class WhatIsDate

    {

        public static void main(String[] args) {

            Date date = new Date(2001, 8, 8, 8, 8, 8);

            System.out.println(date);

        }

    }

Java 的编译器竟然报如下信息 (Sun JDK1.3, Windows 2000 中文下)



注意:

WhatIsDate.java 使用或覆盖一个不鼓励使用的API。

注意:

使用-deprecation重新编译,以得到详细信息。!

我们使用 javac -deprecation WhatIsDate.java, 得到如下信息:



WhatIsDate.java:7: 警告:

在java.util.Date中的Date(int,int,int,int,int,int)已经不提倡使用

            Date date = new Date(2001, 8, 8, 8, 8, 8);

                        ^

1 warning

那么 Date 对象究竟是为了满足哪个需求呢?看来它不是用来实现基于年/月/日 小时:分钟 的时间表述。我们查看 Java 的文档,我们看到有 getTime() 方法,它返回的竟然是一个 long 值。
System.out.println(date.getTime());

文档进一步又告诉我们这个值代表了当前系统的时间离1970/1/1 0:0 的毫秒差,而且是在 GMT 时区下(也被称为 EPOC)。如果我们指定的时间是在此之前的,那它将返回一个负数值。

这个发现让我们对 Date 对象有了一个全新的认识-Date 存放的是与 EPOC 的偏差值。换而言之我们也可通过 long 类型来表示时间?对了,这个猜想是得到了 Java 的支持:



    // 第二种获得当前时间的方法

    long dateInMilliSeconds = System.currentTimeMillis();

    // 这时候打印出的只是一串数字而已

    System.out.println(dateInMilliSeconds);

对程序执行效率敏感的程序员可以发现这个方法只是生成一个 Java 的原始类型 (primitive type) long, 不需要实例化一个对象。因此如果我们对时间的处理只是在内部进行时,可以用 long 来代替 Date 对象。

最典型的应用就是在一段代码开始和结束时,分别获得系统当前的时间,然后计算出代码执行所需的时间(微秒级)。



    long start = System.currentTimeMillis();

    // 代码段

    System.out.println("需要 " (System.currentTimeMillis()-start) " 微秒");

那么当我们要把这个 long 值已更为友好的表现形式显示处理的时候,我们可以用它来构造 Date 对象:
Date date = new Date(dateInMilliSeconds);
System.out.println(date);

我们看到了在 Java 中对时间最为基本的表示,有通过对EPOC 的偏差值进行处理。Date 对象是对它的一个对象的封装。我们同时也看到了,在现时世界中我们对时间的描述通常是通过"某年某月某日某时某分"来定义的。Date 的显示(实际上是 toString() 方法)描述了这些信息,但 Java 并不建议我们用这种方式直接来构件 Date 对象。因此我们需要找出哪个对象可以实现这个需求。这就是我们下面就要讲述的 Calendar 对象的功能。

在我们进一步研究 Calendar 之前,请记住 Date 只是一个对 long 值(基于 GMT 时区)的对象封装。它所表现出来的年/月/日 小时:分钟 时区的时间表述,只是它的 toString() 方法所提供的。千万不要为这个假象所迷惑。

2 强大的 Calendar
首先请记住 Calendar 只是一个抽象类, 也就是说你无法直接获得它的一个实例,换而言之你可以提供一个自己开发的 Calendar 对象。

那究竟什么是一个 Calendar 呢?中文的翻译就是日历,那我们立刻可以想到我们生活中有阳(公)历、阴(农)历之分。它们的区别在哪呢?

比如有:
月份的定义 - 阳`(公)历 一年12 个月,每个月的天数各不同;阴(农)历,每个月固定28天
每周的第一天 - 阳(公)历 星期日是第一天;阴(农)历,星期一是第一天

实际上,在历史上有着许多种纪元的方法。它们的差异实在太大了,比如说一个人的生日是"八月八日" 那么一种可能是阳(公)历的八月八日,但也可以是阴(农)历的日期。所以为了计时的统一,必需指定一个日历的选择。那现在最为普及和通用的日历就是 "Gregorian Calendar"。也就是我们在讲述年份时常用 "公元几几年"。Calendar 抽象类定义了足够的方法,让我们能够表述日历的规则。Java 本身提供了对 "Gregorian Calendar" 规则的实现。我们从 Calendar.getInstance() 中所获得的实例就是一个 "GreogrianCalendar" 对象(与您通过 new GregorianCalendar() 获得的结果一致)。

下面的代码可以证明这一点:



    import java.io.*;

    import java.util.*;



    public class WhatIsCalendar

    {

        public static void main(String[] args) {

            Calendar calendar = Calendar.getInstance();

            if (calendar instanceof GregorianCalendar)

                System.out.println("It is an instance of GregorianCalendar");

        }

    }

Calendar 在 Java 中是一个抽象类(Abstract Class),GregorianCalendar 是它的一个具体实现。

我们也可以自己的 Calendar 实现类,然后将它作为 Calendar 对象返回(面向对象的特性)。在 IBM alphaWorks 上,IBM 的开发人员实现了多种日历(http://www.alphaworks.ibm.com/tech/calendars)。同样在 Internet 上,也有对中国农历的实现。本文对如何扩展 Calendar 不作讨论,大家可以通过察看上述 Calendar 的源码来学习。

Calendar 与 Date 的转换非常简单:



    Calendar calendar = Calendar.getInstance();

    // 从一个 Calendar 对象中获取 Date 对象

    Date date = calendar.getTime();

    // 将 Date 对象反应到一个 Calendar 对象中,

    // Calendar/GregorianCalendar 没有构造函数可以接受 Date 对象

    // 所以我们必需先获得一个实例,然后设置 Date 对象

    calendar.setTime(date);

Calendar 对象在使用时,有一些值得注意的事项:

1. Calendar 的 set() 方法

set(int field, int value) - 是用来设置"年/月/日/小时/分钟/秒/微秒"等值

field 的定义在 Calendar 中

set(int year, int month, int day, int hour, int minute, int second) 但没有

set(int year, int month, int day, int hour, int minute, int second, int millisecond) 前面 set(int,int,int,int,int,int) 方法不会自动将 MilliSecond 清为 0。

另外,月份的起始值为0而不是1,所以要设置八月时,我们用7而不是8。

calendar.set(Calendar.MONTH, 7);

我们通常需要在程序逻辑中将它清为 0,否则可能会出现下面的情况:



    import java.io.*;

    import java.util.*;



    public class WhatIsCalendarWrite

    {

        public static void main(String[] args) throws Exception{

            ObjectOutputStream out =

                new ObjectOutputStream(

                    new FileOutputStream("calendar.out"));

            Calendar cal1 = Calendar.getInstance();

            cal1.set(2000, 7, 1, 0, 0, 0);

            out.writeObject(cal1);

            Calendar cal2 = Calendar.getInstance();

            cal2.set(2000, 7, 1, 0, 0, 0);

            cal2.set(Calendar.MILLISECOND, 0);

            out.writeObject(cal2);

            out.close();

        }

    }

我们将 Calendar 保存到文件中



    import java.io.*;

    import java.util.*;



    public class WhatIsCalendarRead

    {

        public static void main(String[] args) throws Exception{

            ObjectInputStream in =

                new ObjectInputStream(

                    new FileInputStream("calendar.out"));

            Calendar cal2 = (Calendar)in.readObject();

            Calendar cal1 = Calendar.getInstance();

            cal1.set(2000, 7, 1, 0, 0, 0);

            if (cal1.equals(cal2))

                System.out.println("Equals");

            else

                System.out.println("NotEqual");

            System.out.println("Old calendar " cal2.getTime().getTime());

            System.out.println("New calendar " cal1.getTime().getTime());

            cal1.set(Calendar.MILLISECOND, 0);

            cal2 = (Calendar)in.readObject();

            if (cal1.equals(cal2))

                System.out.println("Equals");

            else

                System.out.println("NotEqual");

            System.out.println("Processed Old calendar " cal2.getTime().getTime());

            System.out.println("Processed New calendar " cal1.getTime().getTime());

        }

    }

然后再另外一个程序中取回来(模拟对数据库的存储),但是执行的结果是:



NotEqual

Old calendar 965113200422 <------------ 最后三位的MilliSecond与当前时间有关

New calendar 965113200059 <-----------/

Equals

Processed Old calendar 965113200000

Processed New calendar 965113200000

另外我们要注意的一点是,Calendar 为了性能原因对 set() 方法采取延缓计算的方法。在 JavaDoc 中有下面的例子来说明这个问题:



Calendar cal1 = Calendar.getInstance();

    cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31

    cal1.set(Calendar.MONTH, Calendar.SEPTEMBER); //应该是 2000-9-31,也就是 2000-10-1

    cal1.set(Calendar.DAY_OF_MONTH, 30); //如果 Calendar 转化到 2000-10-1,那么现在的结果就该是 2000-10-30

    System.out.println(cal1.getTime()); //输出的是2000-9-30,说明 Calendar 不是马上就刷新其内部的记录

在 Calendar 的方法中,get() 和 add() 会让 Calendar 立刻刷新。Set() 的这个特性会给我们的开发带来一些意想不到的结果。我们后面会看到这个问题。

2. Calendar 对象的容错性,Lenient 设置
我们知道特定的月份有不同的日期,当一个用户给出错误的日期时,Calendar 如何处理的呢?



    import java.io.*;

    import java.util.*;



    public class WhatIsCalendar

    {

        public static void main(String[] args) throws Exception{

            Calendar cal1 = Calendar.getInstance();

            cal1.set(2000, 1, 32, 0, 0, 0);

            System.out.println(cal1.getTime());

            cal1.setLenient(false);

            cal1.set(2000, 1, 32, 0, 0, 0);

            System.out.println(cal1.getTime());

        }

    }

它的执行结果是:



    Tue Feb 01 00:00:00 PST 2000

    Exception in thread "main" java.lang.IllegalArgumentException

        at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:1368)

        at java.util.Calendar.updateTime(Calendar.java:1508)

        at java.util.Calendar.getTimeInMillis(Calendar.java:890)

        at java.util.Calendar.getTime(Calendar.java:871)

        at WhatIsCalendar.main(WhatIsCalendar.java:12)

当我们设置该 Calendar 为 Lenient false 时,它会依据特定的月份检查出错误的赋值。

3. 不稳定的 Calendar

我们知道 Calendar 是可以被 serialize 的,但是我们要注意下面的问题



    import java.io.*;

    import java.util.*;



    public class UnstableCalendar implements Serializable

    {



        public static void main(String[] args) throws Exception{

            Calendar cal1 = Calendar.getInstance();

            cal1.set(2000, 7, 1, 0, 0 , 0);

            cal1.set(Calendar.MILLISECOND, 0);

            ObjectOutputStream out =

                new ObjectOutputStream(

                new FileOutputStream("newCalendar.out"));

            out.writeObject(cal1);

            out.close();

            ObjectInputStream in =

                new ObjectInputStream(

                new FileInputStream("newCalendar.out"));

            Calendar cal2 = (Calendar)in.readObject();

            cal2.set(Calendar.MILLISECOND, 0);

            System.out.println(cal2.getTime());

        }

    }

运行的结果竟然是: Thu Jan 01 00:00:00 PST 1970

它被复原到 EPOC 的起始点,我们称该 Calendar 是处于不稳定状态。这个问题的根本原因是 Java 在 serialize GregorianCalendar 时没有保存所有的信息,所以当它被恢复到内存中,又缺少足够的信息时,Calendar 会被恢复到 EPOCH 的起始值。Calendar 对象由两部分构成:字段和相对于 EPOC 的微秒时间差。字段信息是由微秒时间差计算出的,而 set() 方法不会强制 Calendar 重新计算字段。这样字段值就不对了。

下面的代码可以解决这个问题:



    import java.io.*;

    import java.util.*;



    public class StableCalendar implements Serializable

    {



        public static void main(String[] args) throws Exception{

            Calendar cal1 = Calendar.getInstance();

            cal1.set(2000, 7, 1, 0, 0 , 0);

            cal1.set(Calendar.MILLISECOND, 0);

            ObjectOutputStream out =

                new ObjectOutputStream(

                new FileOutputStream("newCalendar.out"));

            out.writeObject(cal1);

            out.close();

            ObjectInputStream in =

                new ObjectInputStream(

                new FileInputStream("newCalendar.out"));

            Calendar cal2 = (Calendar)in.readObject();

            cal2.get(Calendar.MILLISECOND); //先调用 get(),强制 Calendar 刷新

            cal2.set(Calendar.MILLISECOND, 0);  //再设值

            System.out.println(cal2.getTime());

        }

    }

运行的结果是: Tue Aug 01 00:00:00 PDT 2000

这个问题主要会影响到在 EJB 编程中,参数对象中包含 Calendar 时。经过 Serialize/Deserialize 后,直接操作 Calendar 会产生不稳定的情况。

4. add() 与 roll() 的区别

add() 的功能非常强大,add 可以对 Calendar 的字段进行计算。如果需要减去值,那么使用负数值就可以了,如 add(field, -value)。

add() 有两条规则:

当被修改的字段超出它可以的范围时,那么比它大的字段会自动修正。如:
Calendar cal1 = Calendar.getInstance();
cal1.set(2000, 7, 31, 0, 0 , 0); //2000-8-31
cal1.add(Calendar.MONTH, 1); //2000-9-31 => 2000-10-1, 对吗?
System.out.println(cal1.getTime()); //结果是 2000-9-30

另一个规则是,如果比它小的字段是不可变的(由 Calendar 的实现类决定),那么该小字段会修正到变化最小的值。

以上面的例子,9-31 就会变成 9-30,因为变化最小。

Roll() 的规则只有一条:
当被修改的字段超出它可以的范围时,那么比它大的字段不会被修正。 如:



Calendar cal1 = Calendar.getInstance();

cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日

cal1.roll(Calendar.WEEK_OF_MONTH, -1); //1999-6-1, 周二

cal1.set(1999, 5, 6, 0, 0, 0); //1999-6-6, 周日

cal1.add(Calendar.WEEK_OF_MONTH, -1); //1999-5-30, 周日

WEEK_OF_MONTH 比 MONTH 字段小,所以 roll 不能修正 MONTH 字段。

由于 Calendar 对象可以将一个时间转化成我们所需要的不同字段信息,可以帮助我们的开发任务。

下一部分我们会介绍 TimeZone, Timestamp 以及如何将 Calendar/Date 通过 DateFormat 灵活地显示给用户。

从光斑图到锤形优化:一次搞定Zemax双胶合透镜的像散与场曲问题 本文详细解析了Zemax双胶合透镜设计中像散与场曲问题的诊断与优化方法。从光斑图分析到锤形优化技巧,提供了完整的光学设计实战指南,帮助设计师快速定位问题并有效改善系统性能,特别适合光学设计工程师和Zemax使用者参考。 阅读详情

相关推荐

AD9176 双通道高速DAC调试记录

AD9176是一款高性能双通道16位数模转换器,支持高达12.6GSPS采样率,专为多频段无线应用设计。该器件集成8通道15.4Gbps JESD204B接口,支持复数/实数数据输入,每通道最大输入速率达3.08GSPS。关键特性包括:48位高精度NCO、灵活的插值滤波器(最高12倍)、优异的动态性能(SFDR达-83dBc@1.84GHz)以及多芯片同步功能。硬件调试需重点关注时钟配置(建议250M基准时钟)、JESD参数匹配及交流耦合设计。测试指标要求SFDR>55dBc@312MHz,实测值可达65d

universaldata的博客 1496

详解Java中的时区类TimeZone的用法

最好的方法是确保JAVA虚拟机(JVM)的默认时区类是正确的,并且适合您的语言环境。时区可以用来获取或者规定时区,也可以用来计算时差,这里我们就来详解Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)中的时区类时区的用法,特别要注意下面所提到的时区相关的时间校准问题。如果没有可用的时区ID,那么您可以创建一个自定义时区,并使用java.util.TimeZone类的setDefault方法将其设置为默认时区——就像我前面在Initializer类中所做的那样。

fmz2222的博客 9955

对Palantir的本体论的理解

本体论Ontology是Palantir的整个技术架构的核心与基石,它远不止是一个数据模型,而是一个旨在对企业决策本身进行建模的“数字世界的操作系统”。

liuyukuan的专栏 1156

java timezone_详解Java中的时区类TimeZone的用法

一、TimeZone 简介TimeZone 表示时区偏移量,也可以计算夏令时。在操作 Date, Calendar等表示日期/时间的对象时,经常会用到TimeZone;因为不同的时区,时间不同。下面说说TimeZone对象的 2种常用创建方式。1.获取默认的TimeZone对象使用方法:TimeZone tz = TimeZone.getDefault()2.使用 getTimeZone(Stri...

weixin_42485891的博客 8558

HFSS 3D LAOUT PCB 裁剪,差分线,过孔仿真和优化

我本身不是做天线设计的,所以HFSS这个软件给我主要还是做PCB级别的高速信号完整性仿真,一般2.5D的仿真软件无法对过孔和跨平面进行仿真。所以要借助三维电磁软件进行。今天就针对PCB进行裁剪。为什么要裁剪?以为如果把整个PCB一起仿真的话,应该要好几个月吧。所以为了加快仿真速度,必须进行裁剪仿真。①candence的PCB可以直接导入。那么先导入brd文件,file-import-candence结果如下②点击cutout,选中要仿真的net和参考平面。这里最好选creat new不然会把原文件覆盖掉。注

gjatwfn的专栏 1万+

音频功放电路大全

作为硬件工程师,特别是做纯粹模拟电路、应用于音频功放的工程师,对于A类,B类,AB类,D类,G类,H类,T类功放应该特别熟悉。大多数工程师或许只知道其中的一部分、或者知道大概,为了让更多的工程师掌握更加详尽的音频功放知识,下文对以上说的音频功放做详细的说明。 功放,顾名思义,就是功率放大的缩写。与电压或者电流放大来说,功放要求获得一定的、不失真的功率,一般在大信号状态下工作,因此,功放电路一般包含电压放大或者电流放大电路没有的特殊问题,具体表现在:①输出功率尽可能大;②通常在大信号状态下工作;③非线性失真突

ltqdxl的博客 6598

时区问题可以使用java.util.TimeZone类来处理

注意,时区标识符是按照国际惯例命名的,例如 "America/Los_Angeles" 和 "Europe/Berlin",可以参考 Java 官方文档中的时区标识符列表来查找特定时区的标识符。接着将时区设置为美国洛杉矶时区,获取当前时间并打印。获取支持的时区列表: 使用静态方法 TimeZone.getAvailableIDs() 可以获取Java支持的所有时区的标识符列表。设置时区: 使用静态方法 TimeZone.setTimeZone(String ID) 可以根据时区标识符设置时区。

m0_59716343的博客 832

CloudFlare CDN优化延迟

这两天在倒腾一个小网站,因为刚注册的域名还没来得及备案,所以就解析到了国外的服务器临时撸代码。为了防止不必要的麻烦,所以在前端套了CloudFlare,但是延迟就比较感人了,通常在150+左右还时不时的抽风,所以就找了点资料来优化一下这个延迟问题。然后再新增一些CloudFlare的亚太地区节点ip的A解析,有耐心的可以分为电信线路和联通线路,我比较懒,所以只分了境内和默认。众所周知CloudFlare是智齿cname解析的,那么我们今天就要用到这个办法了,这里要注意一下,默认的解析是不能动的。

Zuozi - 网络从业者长见识就来Zuozi.NET 1087

Java时间处理2---时区TimeZone类方法探究

原文:优快云博主「Gene Xu> 原文链接:https://blog.youkuaiyun.com/goodbye_youth/article/details/81807273 一、TimeZone 类的定义 TimeZone 类位于 java.util 包中,是一个抽象类,主要包含了对于时区的各种操作,可以进行计算时间偏移量或夏令时等操作 二、TimeZone 类常用方法 getAvailableIDs() 获取」 Java支持的所有时区 ID System.out.println(Arrays.

LarsCheng's Blog 1562

对称式目镜设计实例

对称式目镜设计实例

weixin_72050316的博客 1163

数据分析之AB测试基础知识

在 A/B 测试中,零假设是两组的指标是相同的,当假设检验推断出两组指标不同,但事实上两组指标相同时,就是第一类错误。

qq_45727498的博客 561

探索 Java 中的 Date Calendar TimeZone 和Timestamp

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";google_ad_width = 336;google_ad_height = 280;//<script type="text/java

java专栏 620

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

探索 Java 中的 Date, Calendar, TimeZone 和Timestamp

<br />探索 Java 中的 Date, Calendar, TimeZone 和Timestamp<br />java 2010-12-31 08:56:49 阅读8 评论0  字号:大中小 订阅<br /><br />对象<br />    宋晟 (shengsong@hotmail.com)<br /><br />2001 年 11 月<br /><br />如何计时,自古以来就是一个有着各种答案的问题。中国人从习惯使用农历计时,到选择便于与世界沟通的公元计时。在生活中这两者又一起使用,这已经融入

yy6060 794

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mysql mapper设置当前日期_如何使用java.time.LocalDateTime设置jadira Persist...

我试图使用Hibernate和JPA持久化java.time.LocalDateTime.我使用了Jadira Framework(“org.jadira.usertype:usertype.core:3.2.0.GA”&“org.jadira.usertype:usertype.extended:3.2.0.GA”).我创建了package-info.java文件并在那里创建了@Type...

weixin_36098917的博客 798

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

从Scala研习Java的TimeZone库

Table of Contents 仅包含一个单词的ID 包含多于两个单词的ID 正好包含两个单词的ID 一切缘起于学习Spark的日期时间函数。其中的to_utc_timestamp和from_utc_timestamp函数会涉及到TimeZone的参数。在Spark的源码中追溯,会发现TimeZone的参数会传到源文件:spark/sql/catalyst/src/main/scala...

timothyzh的专栏 651

java timezone 107_java – 从没有TimeZone名称的TimeZone获取TimeZone偏移值

我需要以[/ – ] hh:mm格式保存手机的时区我正在使用TimeZone类来处理这个问题,但我能得到的唯一格式如下:PST -05:00GMT +02:00我宁愿不对结果进行子串,是否有任何键或选项标志我可以设置为只获取值而不是该时区的名称(GMT / CET / PST …)?解决方法:I need to save the phone’s timezone in the format [+...

weixin_29745609的博客 175

你知道JDBC配置jdbcUrl时区参数Timezone的作用及生效原理吗?

摘要:本文探讨了SpringBoot连接PostgreSQL数据库时区配置的重要性。通过实际案例分析了时区设置不当导致的时间数据不一致问题,如服务器与业务时区差异造成的时间显示错误。文章详细介绍了时间流转的关键节点,包括JVM时区、数据库会话时区和字段类型的选择,并提供了完整的时区配置验证检查清单(4个关键检查点)和具体验证方法,确保系统时区配置统一正确。最后给出了开发规范建议,帮助开发者避免跨时区时间处理问题。

ygnnxjava的博客 870

【探索Java世界03】Java常用工具类

包装类数学相关日期相关字符串相关集合相关异常相关I/O相关线程相关网络相关反射注解GUI相关。

专注于技术的小龚,在Java领域死磕... 343

偏移量用java怎样计算时间_Java TimeZone偏移量

I need to save the phone’s timezone in the format [+/-]hh:mm不,你没有偏移本身是不够的,您需要存储整个时区名称/ id。例如,我住在奥斯陆,我目前的偏移是02:00,但在冬天(由于dst)是01:00。标准时间和夏季时间之间的切换取决于您不想探索的因素。所以我不存储02:00(或应该是01:00?)我在我的数据库中存储“欧洲/奥斯陆”。现...

weixin_26833139的博客 642

Spring+Quartz实现周末、节假日排除的定时任务

废话不多说,直接入主题。 需求:          定时发送报表数据到企业号关注用户上,但是这些数据周末和节假日。 问题:        直接上图:   很明显quartz的trigger,有如上框出来的几个:CalendaerIntervalTriggerImpl、CronTriggerImpl、DailyTimeIntervalTriggerImpl、SimpleT

telyy123的专栏 1万+

源码分析:JDK获取默认时区的风险和最佳实践

分析JDK源码如何获取默认时区,识别其中的风险,并给出最佳实践方案

小虚竹的专栏 2万+

【java】要探索JDK的核心底层源码,那必须掌握native用法

native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。

DreamSun的博客 708

java 时区 不正确_如何在Java 1.5.0中修复不正确的时区偏移?

我有一个程序,它使用java.util.TimeZone为各种时区生成GMT偏移量.最近有人指出,阿根廷布宜诺斯艾利斯的其中一个时区已经过了一个小时.我写了一个简单的java程序来查看java TimeZone类给出的偏移量.事实证明它为布宜诺斯艾利斯提供了错误的价值,但所有其他时区(我们使用的)都没问题.我认为问题可能是运行代码的机器上的java版本.一台机器(v1.6.0_22)给出正确的值,...

weixin_28871731的博客 164

ClickHouse-Java JDBC驱动深度探索:时区处理与数据类型映射技巧

ClickHouse-Java JDBC驱动是连接Java应用与ClickHouse数据库的关键组件,它提供了高效的数据交互能力。本文将深入剖析该驱动在时区处理和数据类型映射方面的核心机制与实用技巧,帮助开发者避免常见陷阱,优化数据处理流程。 ## 时区处理机制详解 ClickHouse-Java JDBC驱动采用多层次的时区管理策略,确保日期时间数据在Java应用与ClickHouse服务器

gitblog_00615的博客 896

2022-07-28 第二小组 张明旭 Java基础学习记录

新旧时间类工具包、一些常用工具包

weixin_71777094的博客 643

[Java EE]使用JDBC连接MySql时报错:You must configure either the server or JDBC driver (via the serverTimezon

The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utiliz

专注于全栈开发领域 557
上一篇: 基于Java的移动电话统治未来无线世界?
下一篇: 使用jar
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值