新普金娱乐网址


天文她的身躯像经风的树叶,落了下去

您不在三头六臂时,你是什么人

光阴戳 时区 java mysql天文

  • 二月 09, 2019
  • 天文
  • 没有评论
  • 当一个岁月
    比如二零一六年七月6日,生成时间戳。这些运算是与时区有关的。首先得肯定这几个时间是哪位时区的,然后转换成utc时区的时日。再减去1970,得到的秒数,就是时刻戳。
  • 日子戳是个自然的值,他与时区没关。
  • 当想把时光戳还原成时间,必须指定时区,才能认同什么时间。
  • 统计:时间与时区有关。时间戳与时区毫无干系,它是utc,也就是gmt时区的时光与1970年的差。在岁月轴的某一点整日,不管位于哪个时区(如日本首都+8钟头,或者格林威治 +0钟头),它转换成的岁月戳是相等的。
      • 首先澄清一个概念:

乘机花旗国留学人数的增多,去美利坚合众国考什么比较好成为广大人关切的话题,尤其是去美利坚合作国考托福抑或雅思然则让更多的人诚惶诚恐了很久,不知情在雅思和托福之间怎么样抉择,去花旗国考托福依旧雅思更便于吗?
有关去美利坚合作国考托福或者雅思的标题,作者简单的整理一下雅思和托福的表征,来和豪门享受。
词汇量:雅思词汇量较小,约5000-7000,
偏生活化; 托福词汇量较大,约8000-10000,专业词汇多。
阅读:雅思的读书:人文,自然,科学;托福的阅读:天文,考古,宗教,军事等。
口语:雅思的口语:人人对话,眼神互换,可依靠身体语言,发音清晰,听不懂难题得以再问一回,人性化,考生可在当然的情景下与考官举行调换,最大程度发挥自己真正的罗马尼亚(România)语水平;托福的口语:人机对话,半场考试无交换,仅15秒的预备答题时间,不可能结巴,无法冒出不止3秒的暂停或中断,全程要确保发音清晰,不然会潜移默化机器识别,考生精神压力大。
透过以上的素材,对于去花旗国考托福抑或雅思,大家的心头一定已经有了答案了啊。据明白,雅思考试的情节有所学术性和实用性,并且还包罗了广大真正的国外读书和生存境况,在离境留洋的进度中都是有可能遇到的,这或多或少对此事后的上学和生活具有实际的帮衬。
雅思为了确保考生考试时的美好状态,将笔试与口试分开举办,幸免延续多少个钟头的试验会让考生暴发困倦而影响表明。人人对话,眼神调换,可凭借身体语言,发音清晰,听不懂难点可以再问五次,人性化,考生可在当然的意况下与考官举办互换,最大程度发挥团结真实的越南语水平。
去米国考什么相比较好?从雅思考试认同度来讲,在美利坚合作国业已取得广泛肯定,当先3000多家认可。不仅数量上卓殊多,而且在质量上中国学童相比较看中的排行对比靠前的院校也都认同雅思考试。

 

不无的linux系统文件系统底层存储的都是UTC时间,也就是说都是自1970年0时0分0秒以来的UTC标准时间的秒数。

不论系统陈设是如何时区,突显怎么差异,底层存储都是一样的。

 

  • 怎么收获UTC系统时间?

 

在shell环境下 >date ‘+%s’ 即可获取

在mysql环境下>select unix_timestamp();即可得到

 

  • timestamp是什么?

timestamp是mysql数据库中的一种字段类型,

毫不说太多,

  • 其中存储是4个字节
  • 精度达到微妙
  • 回转换成UTC时间存储
  • 读取的时候再根据时区转换回来

mysql> select now()+0;
+———————–+
| now()+0               |
+———————–+
| 20130722184134.000000 |
+———————–+
1 row in set (0.00 sec)

mysql> select now();  
+———————+
| now()               |
+———————+
| 2013-07-22 18:41:37 |
+———————+
1 row in set (0.00 sec)

可以见到,大家看来的timestamp实际是一度依据当下时区转换过格式的字符方式

 

  • 何以在mysql中根据timestamp得到UTC系统时间戳呢吗?

很简单,mysql> select unix_timestamp( 20130722183356.000000);
+—————————————-+
| unix_timestamp( 20130722183356.000000) |
+—————————————-+
|                             1374489236 |
+—————————————-+

             

  • 怎么在mysql中依据UTC 系统时间戳得到当前时区的timestamp呢?

mysql> select from_unixtime(1374489236);
+—————————+
| from_unixtime(1374489236) |
+—————————+
| 2013-07-22 18:33:56       |
+—————————+
1 row in set (0.00 sec)

 

  •  如何在mysql中按照近日时区的时区获得其余时区的timestamp呢?

mysql> SELECT CONVERT_TZ(‘2013-07-22 18:41:37′,’+08:00′,’+00:00’) as
UTC;         
+———————+
| UTC                 |
+———————+
| 2013-07-22 10:41:37 |
+———————+
1 row in set (0.00 sec)

 

 

  • 一个少有的题材

 

数据库使用亚马逊(Amazon) RDS 是无能为力修改时区的,统一行使UTC时区

应用程序使用亚马逊 服务器 是UTC -7 美西时刻

数据库部分时辰字段使用了current_timestamp,使用了UTC时区

局地字段使用了unix_time,由应用程序插入,理论上也是UTC时间

有些字段使用了unix_time并根据app服务器的时区转成了时间的string格式,导致出现UTC-7的年华

造成了同一IDC的数量有了三种时光

===========================================

结论:

俺们不须求被timestamp和时区弄糊涂,其实很粗略,timestamp存储的时日是带时区偏移的。

拥有的数据库的时光应当联合操作,要么使用DB的current_timestamp,要么使用应用程序插入。

在有多IDC且不相同时区的景色下,

若是急需标准UNIX时间戳:我提议只必要每便取出UTC的日子戳举行拍卖

一旦急需专业的timestamp,我提出任何统一convert到一个时区去处理

 


0

 

(摘自http://www.cnblogs.com/flying5/archive/2011/12/05/2276578.html)

前不久在编程中遭遇了岁月与时区相关的标题,整理在此处

  我的先后是一个在Hadoop上运行的分布式程序,从MySQL数据库中取数据,经过处理以后输出

一. 基本概念

  时区 :time zone
1884年国际经线会议确定,满世界按经度分为24个时区,每区各占经度15°。

     
以本初子午线为中央经线的时区为零时区,由零时区往南、西各分12区,东、西12区都是半时区,共同选用180°经线的地点时。

  CST :China Standard 提姆e UTC+8:00 中国正规时间(Hong Kong时间),在东八区

  UTC :Universal 提姆e
Coordinated,世界和谐时间,又称世界标准时间、世界统一时间。UTC
提供了一种与时区非亲非故(或非特定于时区)的小运。

      世界上的享有时区都足以代表为 UTC 加上或减去一个偏移量。

      由此,UTC是0时区的光阴,如高松市为早晨八点(东八区),UTC时间就为零点,时间比上海时晚八钟头

  GMT :格林wich Mean
提姆e格林威治标准时间,指位于英国London烈山区的皇家格林尼治天文台的正规时间,因为本初子午线被定义在通过那里的经线。

  Unix timestamp :Unix时间戳,或称Unix时间(Unix
time)、POSIX时间(POSIX time),是一种时光代表方法,

      定义为从格林威治时间(UTC/GMT的晚上)1970年08月01日00时00分00秒起至现在的总秒数。

  可以这么说:

  UTC和GMT大约是平等概念,两者的界别是GMT是一个天文上的定义,UTC是基于原子钟。

  GMT=UTC

  GMT + 8 = UTC + 8 = CST

  UTC+时间差=本地时间 (时间差东为正,西为负,东八区记为 +0800)

 

二. 从数据库取多少的进程

?

  mysql>select auction_id,startsfrom auctions where auction_id=88888;
+-------------+---------------------+
| auction_id  | starts |
+-------------+---------------------+
| 88888       | 2011-10-24 20:32:58 |
+-------------+---------------------+
1 rowin set (0.00 sec)
 
mysql> show columnsfrom auctions;
+--------------------------------+---------------+------+-----+---------+-------+
| Field | Type |Null KeyDefault | Extra |
+--------------------------------+---------------+------+-----+---------+-------+
|starts | datetime | YES | MUL |NULL | |

  可知:数据库的日子字段starts存的是datetime类型,它是一个和时区相关的string(明显:string都是和时区相关的)

  而且数据库是遵从CST时区存的年月

     程序中从数据库取数据用的sql语句:

?

mysql>select auction_id,DATE_FORMAT(starts,'%Y%m%d%H%i%S')from auctions where auction_id=88888;
+-------------+------------------------------------+
| auction_id  | DATE_FORMAT(starts,'%Y%m%d%H%i%S') |
+-------------+------------------------------------+
| 88888       | 20111024203258 |
+-------------+------------------------------------+
1 rowin set (0.00 sec)

  那里只是简单的用DATE_FORMAT函数把datetime类型的starts字段转换为我们必要的格式
%Y%m%d%H%i%S 而已

 

三、Java代码

  看那样一段转换时间的java代码:

?

// 将字符串时间转化为秒数(yyyyMMddHHmmss)
staticpublic long getUnixTimestamp(String srcTime)
{        
          SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");
          Date result_date;
          longresult_time = 0;
          try
                   result_date = sdf.parse(srcTime);
                   //返回的是毫秒数故除以1000
                   result_time = result_date.getTime()/1000;
          }catch (Exception e) { 
                   //出现异常时间赋值为20000101000000
                   result_time =946684800;
          }
          returnresult_time;
 }

  总计结果:

?

getUnixTimestamp("20111204212224") =1323004944

  表明:java.util.Date中的get提姆e函数定义如下:

     java.util.Date代表一个时间点,其值为距公元1970年一月1日
00:00:00的微秒数。所以它是未曾时区和Locale概念的。

     public long get提姆e() 再次回到自 1970 年 1 月 1 日 00:00:00 GMT
以来此 Date 对象表示的毫秒数

  java中通过如下格局得到当前时刻点: 

?

Date now =new Date(); //这个时间点与本地系统的时区无关

  而正因为其与时区的非亲非故性,才使得大家的囤积数据(时间)是一致的(时区一致性)。
  一般的我们将now存储于数据库中,当大家要求表现数据时,将now格式化成想要的格式,如:2011-12-04
21:22:24
  而以此意义相似交由java.text.DateFormat来促成。例如:

?

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String snow = sdf.format(now);

  大家发现snow是带时间(如2011-12-04 21:22:24)的字符串,那么
2011-12-04 21:22:24 那些时刻是哪位时区的时刻吧?

  默许处境下,SimpleDateFormat
取得当地系统的时区(我的时区为GMT+8首都),然后按照 pattern(”yyyy-MM-dd
HH:mm:ss”)格式化now,
  此时出口的就是 GMT+8
区的时刻了。假设想协助国际化时间,则先指定时区,然后再格式化date数据。例如:

?

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+8"));
String snow = sdf.format(now);// snow = 2011-12-04 21:22:24
sdf.setTimeZone(TimeZone.getTimeZone("GMT+7"));
String snow2 = sdf.format(now);// snow2 = 2011-12-04 20:22:24 (可见:东八区比东七区早一个小时)

  其余,你可以经过如下代码修改本地时区音讯:

?

TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));

  在windows操作系统中,是经过桌面右下角,也足以指定操作系统的时区。

  在linux系统中,通过如下命令能够获取当前时区

?

[admin@localhost]$ date -R
Sun,04 Dec 201122:49:00+0800

 

四、结论:

  get提姆e()再次回到的已经是一个UTC的unix
timestamp秒数了,与时区非亲非故;而转换为字符串后,就和时区相关了
  对于那个秒数,不一致时区的人,依照自己所在的时区去分析,就可以收获不错的时刻了

?

[admin@localhost]$ date -d@1323004944
201112月 04日 星期日21:22:24CST
[admin@localhost]$ date -d@1323004944 -u
201112月 04日 星期日13:22:24UTC

  对于涉及到时间更换的主次来说,若是代码里面没有强行指定时区,那就会借助于操作系统的时区。

  更加是对于分布式程序,倘诺不同机器上系统时区不雷同,那就会出现分裂的数目了!

 

五、对unix timestamp和时区概念的歪曲和误用

  由于历史由来,发现先后中有这么一段代码:

?

// 将字符串时间转化为秒数(yyyyMMddHHmmss),有8个小时的时差
  staticpublic long getLongTime(String srcTime)
  {        
            SimpleDateFormat sdf =new SimpleDateFormat("yyyyMMddHHmmss");
            Date result_date;
            longresult_time = 0;
            try
                     result_date = sdf.parse(srcTime);
                     //返回的是毫秒数故除以1000
                     result_time = result_date.getTime()/10008 3600;  // 这里加了八个小时
            }catch (Exception e) { 
                     //出现异常时间赋值为20000101000000
                     result_time =946684800;
            }
             
            returnresult_time;
   }

  总计结果:

?

getUnixTimestamp("20111204212224") =1323033744

  明显,那几个时间比地点通过 getUnixTimestamp(“20111204212224”) =
1323004944 得到的时日多了8个时辰

       1323033744 – 1323004944 = 28800 = 8 * 3600 = 8h

  假如用户将获取的 1323033744 根据自己所在的时区解析后拿走的结果是:

?

[admin@localhost]$ date -d@1323033744
201112月 05日 星期一05:22:24CST

  获得了一个一心错误的结果!

  但一旦用户将那些 1323033744 依照UTC时区来分析后拿走的结果是:

?

[admin@localhost]$ date -d@1323033744 -u
201112月 04日 星期日21:22:24UTC

  为了便利比较,把 1323004944 的分析结果也拿来对待

?

[admin@localhost]$ date -d@1323004944
201112月 04日 星期日21:22:24CST
[admin@localhost]$ date -d@1323004944 -u
201112月 04日 星期日13:22:24UTC

  可以看出,那一个代码中赢得的秒数时间是比UTC的unix
timestamp秒数多了三个时辰

    这几个小时 1323033744 可以了解为首都时区得到的秒数,但是不是unix
timstamp时间!

    unix timestamp秒数是与时区非亲非故的,不管是在哪个时区得到的unix
timestamp都是千篇一律的

  大家得以证实一下,用香江时间“20111204212224”减去“19700000000000”获得的秒数,就是
1323033744

?

SimpleDateFormat df =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date end = df.parse("2011-12-04 21:22:24");
java.util.Date start = df.parse("1970-01-01 00:00:00");
longdelta = (end.getTime() - start.getTime())/1000;
System.out.println("delta="+ delta); // delta=1323033744

  或者用shell命令来求时间差

?

[admin@localhost]$ date -d"2011-12-04 21:22:24" +%s
1323004944
[admin@localhost]$ date -d"1970-01-01 0:0:0" +%s
-28800
[admin@localhost]$ date -d"2011-12-04 21:22:24" +%s -u
1323033744
[admin@localhost]$ date -d"1970-01-01 0:0:0" +%s -u
0

    1323004944 + 28800 = 1323033744

  对于东八区的人的话,1323033744 那么些时辰依照UTC时间足以分析正确。无法依照自己所在的时区去分析,不然就是错的

  然则只即使东七区的人呢?需求根据UTC时间分析后,自己去减1个小时的时差,so
ugly!

  所以,用户在解析1323033744 那么些数额的时候:

    (1)
根据UTC时间来分析获得上海时间,然后根据时间差换算成自己随处时区的小时

    
   (当然,一般都是在日本东京时区了,所以不要换算,按UTC时间来分析就能收获正确的时光)

    (2) 将以此小时减去8钟头得到unix
timestamp,然后依据自己所在的时区去分析就足以了

  统计:那段代码是对unix timestamp和时区的篡改和误用。

 

六、从数据库获取unix timestamp时间

    其实从数据库是可以一直获获得unix timestamp时间的

?

mysql> select auction_id,unix_timestamp(starts)  from auctions where auction_id=88888;                                                   
 +-------------+------------------------+
 | auction_id  | unix_timestamp(starts) |
 +-------------+------------------------+
 |88888       |            1319459578 |
 +-------------+------------------------+
 1row in set (0.02 sec)

 

七、参考

  java.util.Date
 http://www.jar114.com/jdk6/zh_CN/api/java/util/Date.html

  关于java Date和时区的标题 http://blog.163.com/haizai219@126/blog/static/444125552009101924912981/

八、unix时间戳转换工具

http://code.aosoo.com/unixtime

 

 

相关文章

No Comments, Be The First!
近期评论
    分类目录
    功能
    网站地图xml地图