本文轉載自:http://highforest.blog.51cto.com/125539/842496/
熟悉Oracle數據庫的人,應該知道:select to_char(sysdate,’yyyy-mm-dd’ hh24:mi:ss)from dual將會查詢到怎樣的結果, 不錯,就是類似2012-04-23 20:43:57這樣的一個19位的字符串。那麼在Java中怎麼得到這樣一個字符串呢?仔細研究Java 的API文檔,終於找到了解決辦法:
import java.util.*;
import java.text.*;
public class TestCalendar {
/**
* @param args
*/
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00")); //非常關鍵的!!!
java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
System.out.println(sdf.format(cal1.getTime()));
}
}
需要說明的是這樣其中TimeZone.setDefault(TimeZone.getTimeZone(“GMT+8:00”)); 非常關鍵,沒有這句,出來的結果肯定是GMT標準時間,而不是北京時間!
還需要留意,每次都要通過調用Calendar.getInstance()來讀取當前時刻的時間,不要被Calendar.getTime()方法所矇騙:
public class TestCalendar {
/**
* @param args
*/
public static void main(String[] args) {
Calendar cal1 = Calendar.getInstance();
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));
java.text.SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss SSS");
System.out.println(sdf.format(cal1.getTime()));
for(int i = 0; i<100; i++){
float f = 999999.9f;
do {
f = f - 1.0000001f;
} while(f>0.0f);
}
// cal1 = Calendar.getInstance();
System.out.println(sdf.format(cal1.getTime()));
}
}
會輸出兩個相同的時間串:
2016-05-19 12:50:03 430
2016-05-19 12:50:03 430
去掉第17行的註釋符後,會輸出:
2016-05-19 12:50:13 830
2016-05-19 12:50:13 961