2014-01-24 24 views
0

我一直在嘗試將系統時間提前三小時,然後回到默認值,但我似乎沒有得到我想要的時間。不是cal.setTimeZone(TimeZone.getTimeZone(「America/Los_Angeles」));假設將時間設置爲America/Los_Angeles Timezone?更改系統時間提前三小時,然後回到默認

public static void changeSystemTime() throws Exception { 

    DateFormat dateFormat = new SimpleDateFormat("HH:mm"); 

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 

    System.out.println("Current time is " + dateFormat.format(cal.getTime()); 

    cal.add(Calendar.HOUR_OF_DAY, 3); 
    System.out.println("3 Hours from now is " + dateFormat.format(cal.getTime()); 

    Runtime runtime = Runtime.getRuntime(); 

    runtime.exec("cmd /c Time " + dateFormat.format(cal.getTime())); 
} 

public static void changeSystemTimeToDefault() throws Exception { 

    DateFormat dateFormat = new SimpleDateFormat("HH:mm"); 

    Date date = new Date(); 

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 

    System.out.println("Timezone for LA is " + dateFormat.format(cal.getTime()); 

    Runtime runtime = Runtime.getRuntime(); 

    runtime.exec("cmd /c Time " + dateFormat.format(cal.getTime())); 
} 
+0

問題的標題說,接下來2小時但在您的實際問題,它說3? –

+0

對不起,我只是編輯它 – Gnawk

+0

僅供參考,如果您僅僅是爲了測試目的而更改計算機時鐘,請注意新的[java.time。*包](http://download.java.net/ Java 8中的jdk8/docs/api/java/time/package-summary.html)提供了傳遞自定義[Clock](http://download.java.net/jdk8/docs/api/java/time/Clock。 html)對象。該自定義時鐘可以提供僞造的日期時間值,用於模擬數據進行測試。 –

回答

1

你真的不要在方法中添加3小時changeSystemTime();

原因:

String time = dateFormat.format(cal.getTime()); 
System.out.println("Current time is " + time); 

cal.add(Calendar.HOUR_OF_DAY, 3); 
// here you again work with the initial time, the 3 hours are not added to it 
System.out.println("3 Hours from now is " + time); 

做到這一點:

cal.add(Calendar.HOUR_OF_DAY, 3); 
// get new time 
System.out.println("3 Hours from now is " + cal.getTime()); 
+0

剛剛編輯它謝謝,但我似乎得到的最初時間錯了。現在它的上午9點39分,但它打印出來 當前時間是16:38 – Gnawk

+0

我現在的時間是19.05,它打印19.05,然後22.05(當我增加3小時),所以它對我來說工作正常。 –

+0

試試這部分只是告訴我什麼時候打印給你:DateFormat dateFormat = new SimpleDateFormat(「HH:mm」); 日曆cal = Calendar.getInstance(); (當前時間是「+ dateFormat.format(cal.getTime()); –

0

您可以使用JNI來設置系統時間。這將在Windows上工作。您需要了解JNI和C

這是JNI函數,將由JAVAH實用

JNIEXPORT無效JNICALL Java_TimeSetter_setSystemTime 產生的原型(JNIEnv的* ENV,jobject OBJ,jshort小時,jshort分鐘) {

SYSTEMTIME st; 
GetLocalTime(&st); 
st.wHour = hour;  
st.wMinute = minutes; 
SetLocalTime(&st); 

} Java的JNI包裝是

類TimeSetter {

public native void setSystemTime(short hour, short minutes); 

static { 
    System.loadLibrary("TimeSetter"); 
} 

} 最後,使用它

公共類JNITimeSetter {

public static void main(String[] args) { 

    short hour = 8; 
    short minutes = 30; 

    // Set the system at 8h 30m 

    TimeSetter ts = new TimeSetter(); 
    ts.setSystemTime(hour, minutes); 
} 

}

+0

感謝您的答覆,但我不知道JNI和C – Gnawk