本文目錄一覽:
JAVA UTC時間的基準點問題
計算機用的是unix紀元,1970年1月1日 0時0分 UTC(協調世界時 即升級版的格林威治時間)
可以說是英國標準時間。
中國是UTC+8 八區,中國本地時間要在以上標準時間上面加8小時。
反映在java的timemilli毫秒時是,
long china_ts=System.currentTimeMillier()+1000*60*60*8;
但只在不支持Java SE時區的早期版本(比如Java Card,Java ME/MIDP1.0)才需要自己手工加。
現在的java系統本身有時區庫,用Calendar/Date類,會自動調整時區。不需要再手動算。按以上加法會畫蛇添足。
關於JAVA時間格式轉換問題,涉及時區
//我實現一個時鐘窗口程序給你了,好讓你更容易理解,希望對你有幫助。 import java.awt.*; import java.awt.event.*; import java.util.*; //世界時鐘 public class TimerTest { public static void main(String[] args) { new TimerTestFrame(“世界時鐘”); } } class TimerTestFrame extends Frame { /** * */ private static final long serialVersionUID = 1L; public TimerTestFrame(String s) { super(s); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); setLayout(new GridLayout(2, 6)); ClockCanvas clk1 = new ClockCanvas(“北京”, “GMT+8”); // 創建時鐘 ClockCanvas clk2 = new ClockCanvas(“巴黎”, “GMT+2”); ClockCanvas clk3 = new ClockCanvas(“華盛頓”, “GMT-4”); ClockCanvas clk4 = new ClockCanvas(“洛衫磯”, “GMT-7”); ClockCanvas clk5 = new ClockCanvas(“倫敦”, “GMT+1”); ClockCanvas clk6 = new ClockCanvas(“芝加哥”, “GMT-5”); add(clk1); add(clk2); add(clk3); add(clk4); add(clk5); add(clk6); setSize(500, 350); // 設置框架寬高 setVisible(true); } } class ClockCanvas extends Canvas implements Runnable { /** * */ private static final long serialVersionUID = 1L; private int seconds = 0; private String city; private GregorianCalendar calendar; Thread t; public ClockCanvas(String c, String tz) { city = c; //也可以通過TimeZone.setTimeZone(String n)函數改變時區,n為時區參數名。 calendar = new GregorianCalendar(TimeZone.getTimeZone(tz)); t = new Thread(this); t.start(); setSize(125, 125); // 設置畫布大小 setBackground(Color.black); } // 重寫父類的方法繪製時鐘圖形 public void paint(Graphics g) { Graphics2D g2d = (Graphics2D) g; BasicStroke bstroke = new BasicStroke(2.0f); g2d.setStroke(bstroke); g2d.setColor(Color.green); g2d.drawOval(0, 0, 100, 100); bstroke = new BasicStroke(5.0f); g2d.setStroke(bstroke); g2d.drawLine(50, 0, 50, 5); g2d.drawLine(0, 50, 5, 50); g2d.drawLine(50, 95, 50, 98); g2d.drawLine(95, 50, 98, 50); double hourAngle = 2 * Math.PI * (seconds – 3 * 60 * 60) / (12 * 60 * 60); double minuteAngle = 2 * Math.PI * (seconds – 15 * 60) / (60 * 60); double secondAngle = 2 * Math.PI * (seconds – 15) / (60); bstroke = new BasicStroke(5.0f); g2d.setStroke(bstroke); g2d.drawLine(50, 50, 50 + (int) (30 * Math.cos(hourAngle)), 50 + (int) (30 * Math.sin(hourAngle))); bstroke = new BasicStroke(3.0f); g2d.setStroke(bstroke); g2d.drawLine(50, 50, 50 + (int) (40 * Math.cos(minuteAngle)), 50 + (int) (40 * Math.sin(minuteAngle))); bstroke = new BasicStroke(1.0f); g2d.setStroke(bstroke); g2d.drawLine(50, 50, 50 + (int) (45 * Math.cos(secondAngle)), 50 + (int) (45 * Math.sin(secondAngle))); g2d.setColor(Color.red); g2d.drawString(city, 35, 115); } public void timeElapsed() { //new Date()獲得當前時間 System.out.println(new Date()); calendar.setTime(new Date()); seconds = calendar.get(Calendar.HOUR) * 60 * 60 + calendar.get(Calendar.MINUTE) * 60 + calendar.get(Calendar.SECOND); } public void run() { try { while (true) { Thread.sleep(300); timeElapsed(); repaint(); } } catch (InterruptedException e) { } } }
java中關於時區轉換的問題
我倒是有個笨想法 截取最後5位與+0800比較(都先轉成DATE類型) 少多少就在HOURS上加多少 如果加完後的HOURS數大於24 則HOURS-24並且DATE加1
java時間轉換,帶時區的
我假設了你的已知時間類型為Calendar,如果不是你也可以自己改成Date類型,代碼如下:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
public class Test {
public static void main(String[] args) {
//假如這個是你已知的時間類型
Calendar cal = Calendar.getInstance();
cal.getTimeInMillis();
//北京時區GMT+8
Calendar beijingcal = Calendar.getInstance();
beijingcal.clear();
beijingcal.setTimeZone(TimeZone.getTimeZone(“GMT+8”));
beijingcal.setTimeInMillis(cal.getTimeInMillis());
DateFormat fmt = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
String beijingFormatStr = fmt.format(beijingcal.getTime());
System.out.println(beijingFormatStr);
}
}
原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/129434.html