精華區beta Linux 關於我們 聯絡資訊
請問在 Linux 下面如何利用 JAVA 抓出現在的時間? 請看下面的簡單 code : import java.util.*; import java.text.*; public class testdate { static public void main(String[] args) { Locale locale = new Locale("zh","TW"); DateFormat fmt = DateFormat.getDateTimeInstance (DateFormat.LONG,DateFormat.LONG,locale); fmt.setTimeZone(TimeZone.getDefault()); System.out.println(fmt.format(new Date())); } } 以上這個程式在執行時 , 卻怎麼都抓不到系統正確的時間 ex: 現在是 1999/12/22 早上約 10:29 執行結果:1999?12?21? ??08?29?34? 先別管那些問號,那些是編碼問題。很明顯地,它抓到 1999/12/21 下午 8:29 這是怎麼回事,怎麼會晚了十四小時? 而在 Linux 上面打 'date' , 結果如下: 1999 十二月 22 星期三 10:30:57 CST 系統明明是正確的時間,為什麼 java 抓到慢十四小時? ps:我已經在Linux 的時區部分設成 Asia/Taipei 囉 而把這個 class 檔案 copy 到 Win98 下面(沒有 re-compile),卻又可以正常運作 C:\temp>java testdate 1999年12月22日 上午10時32分29秒 這是怎麼回事?要怎樣才能讓 java 抓到系統現在的時間? -- ◢▇▇▄ ▇▄▁ ▇▄▁ ▇▇▄▁ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄◢▇▇▇▄ ▇▄▁ ▇▇▄▇▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄ ▇ ▇▇ ▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▄▁▇▄▁▇▄ ▇▄ ▇▄▇▄▇▄ ▇▄ ▇▄ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ◥▇▇▄ ▇▄▁ ▇▄ ▇▄ ▇▄ ◥▇▇▄◥▇▇▄◥▇▇▇▄ ▇▄▁ ◥▇▇▇▄ -- ※ Origin: 清華電機 ◆ From: 140.116.247.36 > -------------------------------------------------------------------------- < 發信人: [email protected] (Class 類別的物件), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: 台北科大電子DORAMI (Wed Dec 22 11:22:34 1999) 轉信站: Ptt!bbs.ee.ntu!freebsd.ntu!netnews.csie.nctu!ctu-gate!news.nctu!ccnews 【 在 [email protected] (Les Miserables) 的大作中提到: 】 : 以上這個程式在執行時 , 卻怎麼都抓不到系統正確的時間 : ex: 現在是 1999/12/22 早上約 10:29 : 執行結果:1999?12?21? ??08?29?34? : 先別管那些問號,那些是編碼問題。很明顯地,它抓到 1999/12/21 下午 8:29 : 這是怎麼回事,怎麼會晚了十四小時? : 而在 Linux 上面打 'date' , 結果如下: : 1999 十二月 22 星期三 10:30:57 CST : 系統明明是正確的時間,為什麼 java 抓到慢十四小時? : ps:我已經在Linux 的時區部分設成 Asia/Taipei 囉 : 而把這個 class 檔案 copy 到 Win98 下面(沒有 re-compile),卻又可以正常運作 : C:\temp>java testdate : 1999年12月22日 上午10時32分29秒 : 這是怎麼回事?要怎樣才能讓 java 抓到系統現在的時間? 1. 你跑的 Distribution 鐵定是 RedHat Linux, 因為 C library 裡面 取得 time 的 library 在 redhat 裡面就是有時差.. 2. 要解決你的問題, 把 hour 取得後, + 2 就是正確的時間了... 沒辦法.. 所以我會 取得 os.name 判斷是 Linux -> +2 -- ※ 來源:‧北科大電子 DORAMI bbs.en.ntut.edu.tw‧[FROM: 140.124.71.13] > -------------------------------------------------------------------------- < 發信人: [email protected] (Les Miserables), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: ☆清華電機☆ (Wed Dec 22 11:29:18 1999) 轉信站: Ptt!bbs.ee.ntu!freebsd.ntu!netnews.csie.nctu!news.ee.nthu!star ==> 在 [email protected] (Class 類別的物件) 的文章中提到: > 【 在 [email protected] (Les Miserables) 的大作中提到: 】 > : 這是怎麼回事?要怎樣才能讓 java 抓到系統現在的時間? > 1. 你跑的 Distribution 鐵定是 RedHat Linux, 因為 C library 裡面 Bingo! > 取得 time 的 library 在 redhat 裡面就是有時差.. 唉~~~ > 2. 要解決你的問題, 把 hour 取得後, + 2 就是正確的時間了... 沒辦法.. > 所以我會 取得 os.name 判斷是 Linux -> +2 不是應該加 14 嗎? 不只遲了 2 小時,是遲了 14 小時耶 -- ◢▇▇▄ ▇▄▁ ▇▄▁ ▇▇▄▁ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄◢▇▇▇▄ ▇▄▁ ▇▇▄▇▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄ ▇ ▇▇ ▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▄▁▇▄▁▇▄ ▇▄ ▇▄▇▄▇▄ ▇▄ ▇▄ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ◥▇▇▄ ▇▄▁ ▇▄ ▇▄ ▇▄ ◥▇▇▄◥▇▇▄◥▇▇▇▄ ▇▄▁ ◥▇▇▇▄ -- ※ Origin: 清華電機 ◆ From: 140.116.247.36 > -------------------------------------------------------------------------- < 發信人: [email protected] (Class 類別的物件), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: 台北科大電子DORAMI (Wed Dec 22 14:35:18 1999) 轉信站: Ptt!bbs.ee.ntu!freebsd.ntu!aidebbs!dorami 【 在 [email protected] (Les Miserables) 的大作中提到: 】 : ==> 在 [email protected] (Class 類別的物件) 的文章中提到: : > 1. 你跑的 Distribution 鐵定是 RedHat Linux, 因為 C library 裡面 : Bingo! : > 取得 time 的 library 在 redhat 裡面就是有時差.. : 唉~~~ : > 2. 要解決你的問題, 把 hour 取得後, + 2 就是正確的時間了... 沒辦法.. : > 所以我會 取得 os.name 判斷是 Linux -> +2 : 不是應該加 14 嗎? : 不只遲了 2 小時,是遲了 14 小時耶 +14 ? 小心你會看到 24, 25, ... 時的喔:p 因為我有把 time show 在 applet 上, 所以我那時後也覺得很奇怪, 第一個反應也是 + 14, 後來我改了一下 System time, 就發現出現了 24, 25, 26... 時... 改成 +2, 就只會限制在 0 ~ 23... -- ※ 來源:‧北科大電子 DORAMI bbs.en.ntut.edu.tw‧[FROM: sun.cc.ntut.edu.tw] > -------------------------------------------------------------------------- < 發信人: [email protected] (Les Miserables), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: ☆清華電機☆ (Wed Dec 22 23:47:33 1999) 轉信站: Ptt!bbs.ee.ntu!freebsd.ntu!netnews.csie.nctu!news.ee.nthu!star 那要怎麼利用 Calender 取得「正確」的系統時間? Locale locale = new Locale("",""); DateFormat fmt = DateFormat.getDateTimeInstance (DateFormat.LONG,DateFormat.LONG,locale); fmt.setTimeZone(TimeZone.getTimeZone("CTT")); System.out.println("DateFormat : "+fmt.format(new java.util.Date())); Calendar cal = Calendar.getInstance (TimeZone.getTimeZone("CTT"),locale.TAIWAN); cal.setTimeZone(TimeZone.getTimeZone("CTT")); java.util.Date rightNow = cal.getTime(); System.out.println("Date : "+rightNow.toString()); 以上兩段程式碼,在 Windows98 下面,都可以正確取出現在的時間 但是在 Linux 中,只有 前半段可以顯示正確時間,後半段仍然慢了十四小時!? $ java testdate DateFormat : December 22, 1999 11:55:19 PM GMT+08:00 Date : Wed Dec 22 09:55:19 CST 1999 這到底該怎麼辦? -- ◢▇▇▄ ▇▄▁ ▇▄▁ ▇▇▄▁ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄◢▇▇▇▄ ▇▄▁ ▇▇▄▇▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄ ▇ ▇▇ ▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▄▁▇▄▁▇▄ ▇▄ ▇▄▇▄▇▄ ▇▄ ▇▄ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ◥▇▇▄ ▇▄▁ ▇▄ ▇▄ ▇▄ ◥▇▇▄◥▇▇▄◥▇▇▇▄ ▇▄▁ ◥▇▇▇▄ -- ※ Origin: 清華電機 ◆ From: 140.116.247.36 > -------------------------------------------------------------------------- < 發信人: [email protected] (Class 類別的物件), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: 台北科大電子DORAMI (Thu Dec 23 00:15:55 1999) 轉信站: Ptt!bbs.ee.ntu!freebsd.ntu!aidebbs!dorami 【 在 [email protected] (Les Miserables) 的大作中提到: 】 : 那要怎麼利用 Calender 取得「正確」的系統時間? : Locale locale = new Locale("",""); : DateFormat fmt = DateFormat.getDateTimeInstance : (DateFormat.LONG,DateFormat.LONG,locale); : fmt.setTimeZone(TimeZone.getTimeZone("CTT")); : System.out.println("DateFormat : "+fmt.format(new java.util.Date())); : Calendar cal = Calendar.getInstance : (TimeZone.getTimeZone("CTT"),locale.TAIWAN); : cal.setTimeZone(TimeZone.getTimeZone("CTT")); : java.util.Date rightNow = cal.getTime(); : System.out.println("Date : "+rightNow.toString()); : 以上兩段程式碼,在 Windows98 下面,都可以正確取出現在的時間 : 但是在 Linux 中,只有 前半段可以顯示正確時間,後半段仍然慢了十四小時!? : $ java testdate : DateFormat : December 22, 1999 11:55:19 PM GMT+08:00 : Date : Wed Dec 22 09:55:19 CST 1999 : 這到底該怎麼辦? 唉, 我已經跟你提過, RedHat Linux 下的硬是有時差.. 所以, 你這部份沒有辦法 platform-independent Calendar cal = new GregorianCalendar(); String os = System.getProperty("os.name"); if( os.equals("Linux" ) ) System.out.println("Hour: " + (cal.get(Calendar.HOUR)+2) ); else System.out.println("Hour: " + cal.get(Calendar.HOUR) ); 非這樣做不可, 除非你寫信 跟 Sun 說, Java 在 Linux 上不要以 C library implement... 不然鐵會有時差... 再不然就是改用 Slackware... Slackware 我知道不會有這個問題.. -- ※ 來源:‧北科大電子 DORAMI bbs.en.ntut.edu.tw‧[FROM: ppp1004.cc.ntut.edu.] > -------------------------------------------------------------------------- < 發信人: [email protected] (Les Miserables), 看板: Linux 標 題: Re: 在 Linux 下,如何用 Java 抓出現在的時間? 發信站: ☆清華電機☆ (Thu Dec 23 01:18:25 1999) 轉信站: Ptt!bbs.ee.ntu!news.ntu!ctu-gate!news.nctu!newsfeed.nthu!news.ee.nthu! ==> 在 [email protected] (Class 類別的物件) 的文章中提到: > 【 在 [email protected] (Les Miserables) 的大作中提到: 】 > : 那要怎麼利用 Calender 取得「正確」的系統時間? > 唉, 我已經跟你提過, RedHat Linux 下的硬是有時差.. > 所以, 你這部份沒有辦法 platform-independent > Calendar cal = new GregorianCalendar(); > String os = System.getProperty("os.name"); > if( os.equals("Linux" ) ) > System.out.println("Hour: " + (cal.get(Calendar.HOUR)+2) ); > else > System.out.println("Hour: " + cal.get(Calendar.HOUR) ); > 非這樣做不可, 除非你寫信 跟 Sun 說, Java 在 Linux 上不要以 > C library implement... 不然鐵會有時差... > 再不然就是改用 Slackware... Slackware 我知道不會有這個問題.. 可是我這段程式可以正確顯示時間呀! Locale locale = new Locale("",""); DateFormat fmt = DateFormat.getDateTimeInstance (DateFormat.LONG,DateFormat.LONG,locale); fmt.setTimeZone(TimeZone.getTimeZone("CTT")); System.out.println("DateFormat : "+fmt.format(new java.util.Date())); 這段程式碼有設時區 CTT , 沒有加時間(兩小時),可以正常顯示 可是把同樣的方法套用到 Calender 就還是 delay 了十四小時... Calendar cal = Calendar.getInstance (TimeZone.getTimeZone("CTT"),locale.TAIWAN); cal.setTimeZone(TimeZone.getTimeZone("CTT")); java.util.Date rightNow = cal.getTime(); System.out.println("Date : "+rightNow.toString()); -- ◢▇▇▄ ▇▄▁ ▇▄▁ ▇▇▄▁ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄◢▇▇▇▄ ▇▄▁ ▇▇▄▇▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ▇▇▇▄ ▇ ▇▇ ▇▄▁▇▄▇▄▁▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▇▄▁▇▄▁▇▄ ▇▄ ▇▄▇▄▇▄ ▇▄ ▇▄ ▇▄▁ ▇▄▁ ▇▄▁▇▄ ▇▄▁ ▇▄▁▇▄ ◥▇▇▄ ▇▄▁ ▇▄ ▇▄ ▇▄ ◥▇▇▄◥▇▇▄◥▇▇▇▄ ▇▄▁ ◥▇▇▇▄ -- ※ Origin: 清華電機 ◆ From: 140.116.247.36