Java默认的Redhat Linux Fedora中的时区问题
杰夫·莫特拉姆(尖塔点商务杰夫)写的。
放在2004年12月5日,笔者在公共领域。
此文件提供“是”,没有任何明示的保证或暗示,包括但不限于为特定目的和不侵权,适销性,适用性的保证。笔者在任何情况下,是法律责任的任何索赔,损害赔偿或其他责任,无论是在合同,侵权或其他行动,产生出或在本文档或本文档中使用或其他交易。
说明
我遇到了一个与Java 1.4.2的 运行在Fedora的Redhat Linux(核心版本1)Java是没有检测到从操作系统的正确的默认时区的问题。它被拖欠美国/太平洋时区,即使Linux的日期命令返回正确的时区(美国/东部在我的情况)。
来测试一下你的JVM的默认时区是,编译和运行以下代码:
import java.util.Date;
import java.util.TimeZone;
public class TimeTest {
public static void main(String args[]) {
long time = System.currentTimeMillis();
String millis = Long.toString(time);
Date date = new Date(time);
System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
System.out.println("Current time zone: " + TimeZone.getDefault().getID());
}
}
如果Java是使用默认时区不匹配您的系统时区(Linux的日期命令检查的方法之一),JVM没有成功检测系统时区。
Linux下的解决方案,您可以强制Java使用一个特定的时区设置TZ环境变量到一个适当的值。要设置TZ环境变量的所有实例的bash外壳,与此类似行的/ etc / profile.d目录中创建一个shell脚本:
出口雅轩=“美国/东部”
[ 请注意:此页面上的例子都使用美国/东部时区。请代替你的时区,适当的。]
如果您的系统不支持的/ etc / profile.d 目录,前行添加到/ etc / profile文件 的初始化脚本。
在大多数版本的Linux,你可以通过检查符号链接来确定您的系统默认时区 / etc / localtime的点使用的ls-l / etc / localtime的命令。响应将看起来像这样:
/ etc / localtime的 - >的/ usr /共享/ zoneinfo中/美/东区
部分名称之后的/ usr / share / zoneinfo中/ 雅轩价值。
通过启动任何shell脚本 / etc / init.d下不运行/ etc / profile中 的代码。因此,任何Java程序启动通过 的/ etc / init.d中必须有一个明确的出口TZ =“美国/东部”才能正常工作。
一旦你已经设置TZ变量(您必须注销并重新登录,看到的变化),它会成为您的shell环境的一部分。要检查您已成功设置的值 雅轩,在shell提示符下键入以下命令:
回声$雅轩
的替代品,
你也可以强制Java中的一个特定的默认时区,可以通过编程或使用Java系统属性。编程的另一种方法是最不具吸引力,因为它要求你改变你的Java程序加入行早在这样的程序:
TimeZone.setDefault(TimeZone.getTimeZone(美国/东“))
使用系统属性来设置默认的时区,设置中 user.timezone您的时区的财产。一个地方要做到这一点就开始使用三维启动选项,这样你的Java解释器的命令行:
Java-Duser.timezone的=美国/东欧CLASS_NAME的
虽然这最后的技术工作,应当注意这个属性是不是Java规范的一部分。
Java Default Timezone Issue Under Fedora Redhat Linux
Written by Geoff Mottram (geoff at minaret dot biz).
Placed in the public domain on December 5, 2004 by the author.
This document is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the author be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with this document or the use or other dealings in this document.
Description
I encountered a problem with Java 1.4.2 running under Fedora Redhat Linux (Core Release 1) where Java was not detecting the correct default timezone from the operating system. It was defaulting to the US/Pacific timezone even though the Linux date command returned the correct timezone (US/Eastern in my case).
To test what the default timezone of your JVM is, compile and run the following code:
import java.util.Date;
import java.util.TimeZone;
public class TimeTest {
public static void main(String args[]) {
long time = System.currentTimeMillis();
String millis = Long.toString(time);
Date date = new Date(time);
System.out.println("Current time in milliseconds = " + millis + " => " + date.toString());
System.out.println("Current time zone: " + TimeZone.getDefault().getID());
}
}
If the default timezone that Java is using does not match your system timezone (the Linux date command is one way of checking), the JVM is not successfully detecting your system timezone.
Solution
Under Linux, you can force Java to use a particular timezone by setting the TZ environment variable to an appropriate value. To set the TZ environment variable for all instances of the bash shell, create a shell script in the /etc/profile.d directory with a line similar to this:
export TZ="US/Eastern"
[Please note: All of the examples on this page use the US/Eastern timezone. Please substitute your timezone, as appropriate.]
If your system does not support the /etc/profile.d directory, add the previous line to the /etc/profile initialization script.
Under most versions of Linux, you can determine your system default timezone by checking where the symbolic link /etc/localtime points to by using the ls -l /etc/localtime command. The response will look something like this:
/etc/localtime -> /usr/share/zoneinfo/US/Eastern
The portion of the name after /usr/share/zoneinfo/ is your TZ value.
Any shell scripts that are started through /etc/init.d do not run the /etc/profile code. Therefore, any Java programs you start via /etc/init.d must have an explicit export TZ="US/Eastern" in order to work correctly.
Once you have set the TZ variable (you must log out and log back in to see the change), it will become part of your shell environment. To check that you have successfully set the value of TZ, type the following command at your shell prompt:
echo $TZ
Alternatives
You can also force the use of a particular default timezone in Java either through programming or with a Java system property. The programming alternative is the least attractive as it requires that you change your Java programs by adding a line early in the program like this:
TimeZone.setDefault(TimeZone.getTimeZone("US/Eastern"))
To set the default timezone using a system property, set the user.timezone property to your time zone. One place to do this is on command line that starts your Java interpreter using the -D startup option, like this:
java -Duser.timezone=US/Eastern CLASS_NAME
While this last technique works, be forewarned that this property is not part of the Java specification.
分享到:
相关推荐
安装redhat linux以后需要安装附件的包才能支持中文,否则中文会显示乱码。 请按照如下步骤安装: rpm -ivh libFS-1.0.0-3.1.x86_64.rpm rpm -ivh ttmkfdir-3.0.9-23.el5.x86_64.rpm rpm -ivh chkfontpath-1.10.1-...
Linux 操作系统中的中文输入法补充是一个重要的主题,特别是在 RedHat Linux 环境下。本文档提供了详细的中文输入法补充方法,旨在帮助用户解决 Linux 中中文输入法的相关问题。 中文输入法的重要性 在 Linux 操作...
掌握Linux操作系统之RedHat和Fedora(第4版)
通过阅读和实践"Redhat Linux 9中文官方文档",无论是初学者还是有经验的系统管理员,都能全面了解并掌握Red Hat Linux 9的使用和管理,提升其在Linux环境中的技能和能力。这份资料的价值在于它详尽的内容、清晰的...
RedHat Linux安装图解RedHat Linux安装图解RedHat Linux安装图解RedHat Linux安装图解
redhat linux安装使用指南 redhat linux安装使用指南
RedHat Linux 9.0 安装和配置步骤 RedHat Linux 9.0 安装和配置步骤主要包括安装前的准备、确认安装方式、安装 RedHat Linux 9.0 等几个方面。 一、安装前的准备 在安装 RedHat Linux 9.0 之前,需要检查硬件支持...
在Red Hat Enterprise Linux (RHEL) 6中,默认情况下,YUM在线更新服务是需要订阅的。如果没有注册订阅服务,用户将无法直接使用在线YUM更新。因此,在这种情况下,配置本地YUM源成为了一个非常实用且必要的解决方案...
### RedHat Linux基础知识点解析 #### 一、RedHat Linux概述 - **多用户系统**:RedHat Linux支持多用户同时登录系统,并且每个用户都有自己的工作环境。 - **广泛的硬件支持**:RedHat Linux能够运行在多种硬件...
这篇教程将详细解释如何在Red Hat Linux中安装并配置中文输入法。 首先,我们需要了解的是,Linux系统中的中文输入法主要依赖于Fcitx和IBus两种框架。Fcitx是一个轻量级且可定制的输入法框架,而IBus则是Gnome和KDE...
通过以上步骤,我们成功地在RedHat或Fedora环境中搭建了一个完整的交叉编译环境。不仅学习了如何配置minicom以实现与开发板的串口通信,还深入了解了NFS和TFTP这两种网络服务的配置与使用方法。这对于进行嵌入式系统...
redhat linux 培训 redhat linux 培训 redhat linux 培训 redhat linux 培训 redhat linux 培训 redhat linux 培训 ppt ppt ppt
在Redhat LINUX5.0操作系统上安装Oracle 10g、Tomcat5和JDK是一项技术性较强的任务,涉及到多个层面的知识点...通过遵循这些文档的指导,你可以顺利地在Linux环境中构建起一个运行Java应用和Oracle数据库的服务器环境。
根据给定的文件信息,我们可以总结出一系列关于RedHat FedoraCore Linux6安装的关键知识点: ### 知识点一:FedoraCore Linux6简介 FedoraCore Linux6是Red Hat公司推出的一款基于GNU/Linux的开源操作系统,它继承...
Red Hat Linux和Fedora Linux是两个著名的Linux发行版,它们在开源社区中有着广泛的影响力,尤其在企业级服务器和桌面环境中被广泛应用。这两个发行版都源自于同一个源——Red Hat Linux,但它们的发展路径和目标...
通过以上几个方面的详细阐述,我们可以较为全面地了解到如何解决Redhat Linux系统中的中文乱码问题。这些方法不仅可以帮助用户解决当前遇到的问题,也为未来可能出现的相关问题提供了解决思路。
- **加载ISO镜像**:通过虚拟化软件的设置,将RedHat Linux 7.4的ISO安装镜像加载到虚拟机的虚拟光驱中。 - **启动虚拟机**:启动虚拟机后,根据提示选择安装语言和其他初始配置项。 - **设置时区**:选择正确的...
本文档将详细介绍如何解决 Redhat Linux 9.0 在 VMware 下桥接模式下无法上网的问题。通过本解决方法,您将能够成功地解决这个问题,并且掌握一些基本的 Linux 知识。 一、实验环境 在开始之前,我们需要了解实验...