java改时区

code:

package com.soofound.framework.util;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;

/**
 * 设置时区
 *
 * @author zxf
 * @date 2015-11-4
 */
// java -classpath . com.linux.test.base.SetTimeZone
public class SetTimeZone {

    public static void main(String[] args) {
        setTimeZone();
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time1 = df.format(Calendar.getInstance().getTime());
        System.out.println(time1);
    }

    /**
     * 设置时区 <br>
     *
     * 注:xx:59:59时,可能有问题。可以循环2次验证后再设置
     */
    public static void setTimeZone() {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH");
        String time = df.format(Calendar.getInstance().getTime());
        /**
         * 如果当前java获取的时间与linux的‘date‘命令获取的时间一致,则不修改时区
         */
        String osTime = time();
        System.out.println("def java time: " + time + ", os time: " + osTime);
        if ( time.equals(osTime) ) {
            return;
        }

        /**
         * 先获取往前减的时区
         */
        TimeZone correct = getCorrect("GMT-%d");// 如: GMT-8 ()
        /**
         * 往前减的时区没有,则获取往后加的时区
         */
        if ( correct == null ) {
            correct = getCorrect("GMT+%d");// 如: GMT+8
        }
        /**
         * 如果找到正确的时区,则设置为默认时区
         */
        if ( correct != null ) {
            System.out.printf("set TimeZone: %s %n", correct.getID());
            osTime = time();
            SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH");
            String time1 = df1.format(Calendar.getInstance().getTime());
            System.out.println("set . java time: " + time1 + ", os time: " + osTime);
            TimeZone.setDefault(correct);
        }
    }

    /**
     * 时区区间:1-16,一般1-12就可以了
     *
     * @param format
     * @return
     */
    private static TimeZone getCorrect(String format) {
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH");
        for ( int i = 1; i <= 16; i++ ) {
            String tzName = String.format(format, i);// 减 | 加
            TimeZone tz = TimeZone.getTimeZone(tzName);
            df.setTimeZone(tz);
            String time = df.format(Calendar.getInstance().getTime());

            String linexTime = time();
            if ( time.equals(linexTime) ) {
                return tz;
            }
        }
        return null;
    }

    /**
     * 获取系统时间
     *
     * @return
     */
    private static String time() {
        try {
            String cmd = "date ‘+%F %H‘";
            Process pro = Runtime.getRuntime().exec(new String[] { "sh", "-c", cmd });
            InputStream is = pro.getInputStream();
            byte[] bs = new byte[1024];
            int len = is.read(bs, 0, 1024);
            String time = new String(bs, 0, len);
            if ( time != null )
                time = time.trim();
            return time;
        } catch ( IOException e ) {
            return null;
            // return "2015-11-04 19";// windows test
        } catch ( Exception e ) {
            e.printStackTrace();
            return null;
        }
    }

}
时间: 2024-10-10 23:30:09

java改时区的相关文章

改时区参考

改时区参考 http://blog.sina.com.cn/s/blog_6c9d65a1010145st.html 1.首先查看时区: [email protected]:~$ date -R Tue, 17 Dec 2013 18:23:01 +0800 如果要修改时区,执行sudo tzselect 2.选择区域:亚洲 [email protected]:~$ sudo tzselect [sudo] password for swfsadmin: Sorry, try again. [s

编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad

1.编写一个程序,将 d: \ java 目录下的所有.java 文件复制到d: \ jad 目录下,并 将原来文件的扩展名从.java 改为.jad package copy; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; i

java&amp;postgresql时区总结

1.首先什么是时区? 时区(Time Zone)是地球上的区域使用同一个时间定义.1884年在华盛顿召开国际经度会议时,为了克服时间上的混乱,规定将全球划分为24个时区. 2.Date TimeZone对象给我们的是原始的偏移量,也就是与GMT相差的微秒数,Java的Date对象里面存储着当前时刻到1970年1月1日0:00所经过的毫秒数,它与时区和地域没有关系(其实可以认为是GMT时间) 计算机内部记录的时间(Date date = new Date()), 为格林威治标准时(GMT). 即j

编写一个程序,将 d:\java 目录下的所有.java 文件复制到 d:\jad 目录下,并 将原来文件的扩展名从.java 改为.jad。

package IO; import java.io.*; public class FileCopy { public static void main(String[] args) throws Exception { File srcDir = new File("java"); if(!(srcDir.isDirectory() && srcDir.exists())) { throw new Exception("目录不存在"); } //

linux 跟改时区

更改到上海时间 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 和ntp服务器同步下 ntpdate cn.ntp.org.cn 链接到本地文件 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 同步到硬件 hwclock -w

java 改文件名的例子

public static void main(String[] args) { File file = new File("E:\\\\eclipse\\\\workspace\\\\helloworlddocker\\\\log"); // 判断文件目录是否存在,且是文件目录,非文件 if (file.exists() && file.isDirectory()) { File[] childFiles = file.listFiles(); String path

Java虚拟机详解——JVM常见问题总结

[正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考之前的系列文章,尤其是那篇:Java虚拟机详解04--GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾回收.类加载机制. 先把本文的目录画一个思维导图:(图的源文件在本文末尾) 一.Java引用的四种状态: 强引用:  用的最广.我们平时写代码时,new一个Object存放在堆内存,然后用一个引用指向它,这就是强引用. * 如果一个对象具有强引用,那垃圾回收器绝不会回收它*.当内存空间不足,Java虚拟机宁

Java生成可执行文件 &amp; MANIFEST.MF问题 METAINFO

用 Intellij 进行打包.在File -> Project Structure里面. 然后应该会自动生成Jar包(也可以Build->Build Artifacts) xxx.jar ,拷贝到Linux机器上. 但是开始不能运行.提示找不到Manifest.mf.搜索之后,发现,要选第二个选项"copy to ...",而且必须把Manifest的目录从java改到Resources才行. 这样选项之后,生成的目录里面有两个jar.

Android(java)学习笔记232: 远程服务之 ipc和aidl (面试常问)

一.IPC inter process communication  进程间通讯 二.aidl android  interface  defination  language  安卓接口定义语言 满足两个进程之间  接口数据的交换(ipc) 首先我们搞清楚两个概念  远程服务和本地服务 ?            本地服务:服务的代码在应用程序工程的内部            远程服务:服务的代码在另一个应用程序的里面 三.下面通过案例说明aidl 和 ipc  在远程服务中使用 1.首先创建一