这个问题出自我写的代码需要运行在服务器上。本来的代码是这样写的:

import java.text.*;
import java.util.*;public final class NowDateTime
{public static final String get(){        Calendar cal = Calendar.getInstance();        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String cdate = df.format(cal.getTime());     return cdate;    }public static void main(String[] args){System.out.println(get());}
}

乍看之下没有问题,确实,在我自己的电脑上获取的确实是当前的时间,本人在中国,要的也是中国时间,这一点在这篇文章中很重要。

但是奇怪的,明明格式中写了“HH”,也就是要求24小时制的时间,可是每一次把程序上传到服务器之后,运行的到的程序都是12小时制的,奇了怪了。由于服务器是ubuntu的,开始的时候,我以为是ubuntu的jvm和windows的jvm对相同的代码有不同的行为,虽然java本身以跨平台为特色,但是有那么一两个bug也是可以接受的嘛~~

结果有一天……我仔细看了一下java的文档,虽然文档没有直接说明我的困惑,但是一个方法却让我发现了端倪,那是DateFormat.setTimeZone方法。是的!是时区,服务器再美国,所以在服务器上获取的时间,是美国时间相差12个小时。虽然以前就知道,但是没想到真的如此接近,只相差几分钟,这几分钟被习以为常地用误差解释了。实际上,阴差阳错的是,我次测试都是在下午,中国时间>12,美国时间<12,就造成了一个24小时制,一个是12小时制的假象,所以根本没有注意到时区的问题。知道什么问题之后我改写了代码,明确说明要中国的时区——"Asia/Chongqing"(即“亚洲/重庆”)或"Asia/shanghai"。

所以更改之后的代码如下:

import java.text.*;
import java.util.*;// 获取当前日期时间的静态方法
public final class NowDateTime
{public static final String get(){   Calendar cal = Calendar.getInstance();// 设置格式化的SimpleDateFormat对象,指定中国语言环境SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA);// 创建时区(TimeZone)对象,设置时区为“亚洲/重庆"TimeZone TZ = TimeZone.getTimeZone("Asia/Chongqing");// 将SimpleDateFormat强制转换为DateFormatDateFormat df = null;try{df = (DateFormat)sdf;}catch(Exception E){E.printStackTrace();}// 为DateFormat对象设置时区df.setTimeZone(TZ);// 获取时间表达式String cdate = df.format(cal.getTime());     return cdate;    }public static void main(String[] args){System.out.println(get());}
}

这样在任何国家和地区,任何支持java SE的机器上,都能直接拿到中国时间了(如果java跨平台特性真的是完善的话)。

java获取中国时间代码(适用全球任意机器)相关推荐

  1. java获取当前时间代码(适合于是springboot+vue+java)

    java获取当前时间代码(适合于是springboot+vue+java) /*** 获取当前的的动态时间格式*/Calendar calendar = Calendar.getInstance(); ...

  2. java获取当前日期时间代码

    1.获取当前时间,和某个时间进行比较.此时主要拿long型的时间值. 方法如下: 要使用 java.util.Date .获取当前时间的代码如下 代码如下   Date date = new Date ...

  3. java获取中国城市代码 中国城市ID(天气预报可用哦)

    package org.com.Weather.weather;import java.io.BufferedReader; import java.io.IOException; import ja ...

  4. java获取中国城市代码 中国城市ID

    package org.com.Weather.weather; import java.io.BufferedReader; import java.io.IOException; import j ...

  5. java获取中国城市代码 中国城市ID

    package org.com.Weather.weather; import java.io.BufferedReader; import java.io.IOException; import j ...

  6. 如何使用Java获取当前日期/时间

    用Java获取当前日期/时间的最佳方法是什么? #1楼 采用: String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss") ...

  7. Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几

    Java 获取当前时间之后的第一个周几,java获取当前日期的下一个周几 //获得入参的日期 Calendar cd = Calendar.getInstance(); cd.setTime(date ...

  8. java得到文件创建时间linux,linux java获取文件创建时间

    linux java获取文件创建时间 [2021-01-31 07:35:22]  简介: 服务器 背景 有时候我们需要获取文件的创建时间. 例如: 我在研究 <xtrabackup 原理图&g ...

  9. java获取当前时间和求时间差(分钟,秒钟,小时,年等)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.场景介绍 二.代码时间 1.获取当前时间 2.时间计算(加.减) 需求 前言 建议记住固定的api,因为是java ...

最新文章

  1. TCP/IP协议栈在MSP430单片机上的实现
  2. oracle结束过程,oracle 结束被锁的包或存储过程
  3. 云计算设计模式(十六)——优先级队列模式
  4. 开源串口 Ymodem 上位机软件
  5. 不同性能极限下的服务器,探求极限性能 服务器测试之ScienceMark
  6. glassfish启动后不能进入部署页面_Spring Boot 热部署
  7. 论文笔记_S2D.08-2019-ICRA-使用非对称标注实时联合语义分割和深度估计
  8. 什么是数据脱敏,数据脱敏有哪些方式
  9. 疑惑光栅投影中条纹间距和频率的关系
  10. gmoj 6841. 【2020.11.5提高组模拟】淘淘蓝蓝之树林
  11. 学计算机的要起一个群名,如何起一个代表青春的群名字
  12. 关于C++中的随机数生成器
  13. javascript系列-class6.String类型
  14. AutoCAD Civil 3D创建点文件描述码(点特征码)集控制展点样式与特性
  15. 安天 - 网络安全管培生一面
  16. SaltStack常用的模块
  17. Java Application 程序
  18. 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P104~P129)
  19. SQLServer 查询表的列名称、说明、备注、类型等
  20. 解读中国版存款保险制度:差别费率+强监管色彩

热门文章

  1. ubuntu——火狐浏览器报错:代理服务器拒绝连接
  2. 将三个数字由大到小排列
  3. 思科PVLAN配置详解
  4. 手机地图定位精度对比
  5. 浩辰3D软件新手攻略:如何构造旋转特征?
  6. 高德地图微信小程序SDK x.fail is not a function ‘x.fail‘ is undefined
  7. 黑客组织从2018年底开始利用CVE-2018-0798公式编辑器漏洞
  8. 程序猿的一万种解压方式
  9. 强化学习和生成对抗网络
  10. 【天津大学】成立一所国家研究院