js 时间问题,与centos服务器时区
js 时间问题,与centos服务器时区
如果服务器时区和客户端不一样,那么在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)仅限于RedHatLinux和CentOS系统
timeconfig
方法(3)适用于Debian
dpkg-reconfiguretzdata
3.复制相应的时区文件,替换CentOS系统时区文件;或者创建链接文件
cp/usr/share/zoneinfo/$主时区/$次时区/etc/localtime
在中国可以使用:
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime二、时间
1、查看时间和日期date
2、设置时间和日期
将CentOS系统日期设定成1996年6月10日的命令
date-s06/22/96
将CentOS系统时间设定成下午1点52分0秒的命令
date -s 13:52:003. 将当前时间和日期写入BIOS,避免重启后失效hwclock -w
三、定时同步时间# /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2>&1
这样我们就完成了关于设置修改CentOS系统时区的问题了。希望大家可以学习到更多的知识。
得到当前客户机时区的JS代码
<SCRIPT>
//你的pubDate时间
vardateTimeString="Thursday,9December200412:39:00GMT";
//parse到日期对象中
vardateTimeObject=newDate(dateTimeString);
//得到本地(系统)时区
vartimezoneOffset=newDate().getTimezoneOffset()/60*-1;
document.write('本计算机时区:'+timezoneOffset+'<br/>');
//得到时间
document.write('原时间字符串:'+dateTimeString+'<br/>');
document.write('转换为本地时间:'+dateTimeObject.toLocaleString());
</SCRIPT>publicstaticvoidprintSysProperties(){
Propertiesprops=System.getProperties();
Iteratoriter=props.keySet().iterator();
while(iter.hasNext()){
Stringkey=(String)iter.next();
System.out.println(key+"="+props.get(key));
}
}
/**
*timeZoneOffset表示时区,如中国一般使用东八区,因此timeZoneOffset就是8
*@paramtimeZoneOffset
*@return
*/
publicStringgetFormatedDateString(inttimeZoneOffset){
if(timeZoneOffset>13||timeZoneOffset<-12){
timeZoneOffset=0;
}
TimeZonetimeZone;
String[]ids=TimeZone.getAvailableIDs(timeZoneOffset*60*60*1000);
if(ids.length==0){
//ifnoidswerereturned,somethingiswrong.usedefaultTimeZone
timeZone=TimeZone.getDefault();
}else{
timeZone=newSimpleTimeZone(timeZoneOffset*60*60*1000,ids[0]);
}
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
sdf.setTimeZone(timeZone);
returnsdf.format(newDate());
}
publicstaticStringgetFormatedDateString(String_timeZone){
TimeZonetimeZone=null;
if(StringUtils.isEmpty(_timeZone)){
timeZone=TimeZone.getDefault();
}else{
timeZone=TimeZone.getTimeZone(_timeZone);
}
SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");
sdf.setTimeZone(timeZone);
//TimeZone.setDefault(timeZone);
returnsdf.format(newDate());
}
publicstaticvoidmain(Stringargs[]){
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能给你正确的时间和日期呢?最好的办法是确认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 DateTestJava代码
System.setProperty("user.timezone","Asia/Shanghai");
如果没有一个可用的时间区域ID适合你,那么就你可以创建一个自定义TimeZone 使用java.util.TimeZone 类的 setDefault 方法将它设置为默认的时间区域----就象我先前在ItsInitializer 类中所做的操作一样。