如果服务器时区和客户端不一样,那么在js将时间戳转换成Date时,就会出现日期差异。
如:var dat = new Date(1320076800000);
本来日期是:2011-11-1 12:00:00
但是转换过后,可能就成了:2011-10-31 08:00:00
在我们使用CentOS系统的时候,也许时区经常会出现问题,有时候改完之后还是会出错,下面我们就来学习一种方法来改变这个状况。如果没有安装,而你使用的是 CentOS系统 那使用命令 yum install ntp
然后:ntpdate us.pool.ntp.org 。
因为CentOS系统是用rhas的源码再编译的,很多地方是完全一样的。
rhas5的时区是以文件形式存在的,当前的时区文件是在/etc/localtime
那么其他时区的文件存放在哪里呢?
在/usr/share/zoneinfo下
我们用东八区,北京,上海的时间
#cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#reboot
重启之后,date查看时间、查看当前时区 date -R、查看/修改Linux时区和时间
一、时区
1. 查看当前时区
date -R
2. 修改设置时区
方法(1)
tzselect
方法(2) 仅限于RedHat Linux 和 CentOS系统
timeconfig
方法(3) 适用于Debian
dpkg-reconfigure tzdata
3. 复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件
cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime
在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、时间
1、查看时间和日期
date
2、设置时间和日期
将CentOS系统日期设定成1996年6月10日的命令
date -s 06/22/96
将CentOS系统时间设定成下午1点52分0秒的命令
date -s 13:52:00
3. 将当前时间和日期写入BIOS,避免重启后失效
hwclock -w
三、定时同步时间
# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
这样我们就完成了关于设置修改CentOS系统时区的问题了。希望大家可以学习到更多的知识。
得到当前客户机时区的JS代码
<SCRIPT>
// 你的pubDate时间
var dateTimeString = "Thursday, 9 December 2004 12:39:00 GMT";
// parse到日期对象中
var dateTimeObject = new Date(dateTimeString);
// 得到本地(系统)时区
var timezoneOffset = new Date().getTimezoneOffset()/60*-1;
document.write('本计算机时区: '+timezoneOffset+'<br/>');
// 得到时间
document.write('原时间字符串: '+dateTimeString+'<br/>');
document.write('转换为本地时间: '+dateTimeObject.toLocaleString());
</SCRIPT>
protected static Format format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void printSysProperties(){
Properties props=System.getProperties();
Iterator iter=props.keySet().iterator();
while(iter.hasNext()){
String key=(String)iter.next();
System.out.println(key+" = "+ props.get(key));
}
}
/**
* timeZoneOffset表示时区,如中国一般使用东八区,因此timeZoneOffset就是8
* @param timeZoneOffset
* @return
*/
public String getFormatedDateString(int timeZoneOffset){
if (timeZoneOffset > 13 || timeZoneOffset < -12) {
timeZoneOffset = 0;
}
TimeZone timeZone;
String[] ids = TimeZone.getAvailableIDs(timeZoneOffset * 60 * 60 * 1000);
if (ids.length == 0) {
// if no ids were returned, something is wrong. use default TimeZone
timeZone = TimeZone.getDefault();
} else {
timeZone = new SimpleTimeZone(timeZoneOffset * 60 * 60 * 1000, ids[0]);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(timeZone);
return sdf.format(new Date());
}
public static String getFormatedDateString(String _timeZone){
TimeZone timeZone = null;
if(StringUtils.isEmpty(_timeZone)){
timeZone = TimeZone.getDefault();
}else{
timeZone = TimeZone.getTimeZone(_timeZone);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
sdf.setTimeZone(timeZone);
//TimeZone.setDefault(timeZone);
return sdf.format(new Date());
}
public static void main(String args[]){
System.out.println(getFormatedDateString(""));
System.out.println(getFormatedDateString("Asia/Shanghai"));
System.out.println(getFormatedDateString("Japan"));
System.out.println(getFormatedDateString("Europe/Madrid"));
System.out.println(getFormatedDateString("GMT+8:00"));
printSysProperties();
}
时间区域和JAVA
涉及有关时间区域信息时Java和Solaris很相似。每个时间区域都有一个时间区域ID标识符。在J2SE 1.3 and 1.4中,这个ID是个字符串,是由位于J2SE 安装程序的jre/lib子目录中的tzmappings文件这些ID列表。 J2SE 1.3 仅仅只包含tzmappings文件,但是 J2SE 1.4包含世界不同地区的时间区域数据文件。jre/lib/zi存放着这些文件。在J2SE 1.4里,sun.util.calendar.ZoneInfo从这些文件获取DST规则。在Solaris中, 这些时间区域数据文件是以二进制形式存放的,不是文本文件,因此你不能看它们。 在J2SE 1.4中的时间区域数据文件和在Solaris中是不同的。
java.util.TimeZone类中getDefault方法的源代码显示,它最终是会调用sun.util.calendar.ZoneInfo类的getTimeZone 方法。这个方法为需要的时间区域返回一个作为ID的String参数。这个默认的时间区域ID是从 user.timezone (system)属性那里得到。如果user.timezone没有定义,它就会尝试从user.country和java.home (System)属性来得到ID。 如果它没有成功找到一个时间区域ID,它就会使用一个"fallback" 的GMT值。换句话说, 如果它没有计算出你的时间区域ID,它将使用GMT作为你默认的时间区域。
注意,System属性是在java.lang.System类的initProperties方法中被初始化的。这是一个本地方法。因此源代码是不可用的----除非你深入到J2SE分发包中的本地代码库中去研究。然而,在Windows系统中,System 属性是从Windows注册表中被初始化的,而在Linux/Unix中是由环境变量来进行初始化。initProperties方法的Javadoc声明,某些属性"必须保证被定义" 且列出它们。被java.util.TimeZone类的getDefault方法使用的三个System属性中,只有java.home作为一种“保证的”属性在Javadoc中被列出。
推荐的解决方案
因此,你如何确保JAVA能给你正确的时间和日期呢?最好的办法是确认JAVA虚拟机(JVM)的默认TimeZone类是正确的,且是适合你的地理范围(Locale)的。你如何来确保默认TimeZone是正确的且适合的呢?这又是一个新问题了。象大多数处理的问题一样,这个也有许多解决方案。根据java.util.TimeZone.getDefault方法的源代码来看,最好的办法是正确地设置user.timezone属性。在启动JAVA虚拟机时,你能很容易的通过使用 -D 命令 -line 参数的办法来覆盖(override)在java.lang.System.initProperties方法中所设置的值。例如:
Java代码
java -Duser.timezone=Asia/Shanghai DateTest
这个命令启动DateTest类,并设置 user.timezone属性到Asia/Shanghai。你也能够通过使用java.lang.System 类的setProperty方法来设置user.timezone 属性:
Java代码
System.setProperty("user.timezone","Asia/Shanghai");
如果没有一个可用的时间区域ID适合你,那么就你可以创建一个自定义TimeZone 使用java.util.TimeZone 类的 setDefault 方法将它设置为默认的时间区域----就象我先前在ItsInitializer 类中所做的操作一样。
记住,在J2SE中,大多数日期和时间相关的类都包含时间区域信息,包括那些格式类,如java.text.DateFormat, 因此它们都会被JVM的默认时间区域所影响。然而,在你创建这些类的实例时,你能为它们确保正确的时间区域信息,使得你可以更容易来设置整个JVM的默认时间区域。并且一旦设置好,就可以确保所有的这些类都将使用同一个默认的时间区域。
相关推荐
解决centos时间同步问题,时区问题。
centos5 时区、时间设置及NTP服务.doc
centos服务器配置.docx
CentOS 8 服务器之间Chrony时间同步. 常用命令
centos 7.9服务器 离线 搭建svn服务器 ,该文章适用于 开发人员 实施人员 项目经理用于项目文档管理 代码管理,而不指定如何在centos7.9环境下离线搭建svn服务器,因为大多数的网站只是介绍yum install 的方式,但是...
安装完centos后,发现时间与本地时间不匹配,在网上找了好多的办法,但是一直没有奏效,重启之后,又恢复为原来的时间。很是纳闷。最后抱着试一试的心态加上了这句指令: ln -sf /usr/share/zoneinfor/Asia/Shanghai...
centos服务器使用教程,注意怎么建立docker
搜集的几个安全加固脚本,文档列举常用命令,并编写自己的安全加固脚本,Centos6.9验证。
CentOS
centos修改时区1
Centos8 搭建DNS服务器
此内容是本人整理的针对服务器的系统安装详细图文安装步骤。 对centos7.6的安装步骤进行逐步的拆解,标注。
js实现上传图片到服务器 本文实例为大家分享了js实现上传图片到服务器的具体代码,供大家参考,具体内容如下 HTML //多张图片上传multiple <input type="file" id="file" multiple> //原生提交按钮 ...
CentOS7搭建NTP服务器及客户端同步时间.docx
教你如何搭建 CentOS 服务器 。
CentOS 6.xNTP时间服务器详细配置,CentOS 6.xNTP时间服务器详细配置
4、查看系统使用情况:登录用户数,运行时间等等 uptime 5、rpm -e --nodeps xxxxx.忽略依赖关系删除软件 df -h 查看磁盘使用情况 rpm -ivh 安装rpm包时显示进度情况 ……………………………………
该手册将教会你从零开始,如何在centos6.3服务器系统上搭建(包括安装配置)Java环境、LAMP环境、ftp环境、bugzilla环境等,步骤详细清晰,并对安装配置环境时常遇到的问题进行了分析和解决,保证你下载不后悔。
CentOS 8.2服务器上安装最新版Node.js的方法 Node.js是一个开源JavaScript运行时环境。在这里,您将学习如何在CentOS 8服务器上安装Node.js。 什么是Node.js? Node.js是一个开放源代码,跨平台的后端JavaScript...
CentOS Linux服务器安全设置 最小的权限+最少的服务=最大的安全 我们都必须把不用的服务关闭、把系统权限设置到最小化