java中如何获取时区?

Python024

java中如何获取时区?,第1张

//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。\x0d\x0aimport java.awt.*\x0d\x0aimport java.awt.event.*\x0d\x0aimport java.util.*\x0d\x0a\x0d\x0a//世界时钟\x0d\x0apublic class TimerTest {\x0d\x0apublic static void main(String[] args) {\x0d\x0anew TimerTestFrame("世界时钟")\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aclass TimerTestFrame extends Frame {\x0d\x0a/**\x0d\x0a* \x0d\x0a*/\x0d\x0aprivate static final long serialVersionUID = 1L\x0d\x0a\x0d\x0apublic TimerTestFrame(String s) {\x0d\x0asuper(s)\x0d\x0aaddWindowListener(new WindowAdapter() {\x0d\x0apublic void windowClosing(WindowEvent e) {\x0d\x0adispose()\x0d\x0aSystem.exit(0)\x0d\x0a}\x0d\x0a})\x0d\x0asetLayout(new GridLayout(2, 6))\x0d\x0a\x0d\x0aClockCanvas clk1 = new ClockCanvas("北京", "GMT+8")// 创建时钟\x0d\x0aClockCanvas clk2 = new ClockCanvas("巴黎", "GMT+2")\x0d\x0aClockCanvas clk3 = new ClockCanvas("华盛顿", "GMT-4")\x0d\x0aClockCanvas clk4 = new ClockCanvas("洛衫矶", "GMT-7")\x0d\x0aClockCanvas clk5 = new ClockCanvas("伦敦", "GMT+1")\x0d\x0aClockCanvas clk6 = new ClockCanvas("芝加哥", "GMT-5")\x0d\x0aadd(clk1)\x0d\x0aadd(clk2)\x0d\x0aadd(clk3)\x0d\x0aadd(clk4)\x0d\x0aadd(clk5)\x0d\x0aadd(clk6)\x0d\x0asetSize(500, 350)// 设置框架宽高\x0d\x0asetVisible(true)\x0d\x0a}\x0d\x0a}\x0d\x0a\x0d\x0aclass ClockCanvas extends Canvas implements Runnable {\x0d\x0a/**\x0d\x0a* \x0d\x0a*/\x0d\x0aprivate static final long serialVersionUID = 1L\x0d\x0a\x0d\x0aprivate int seconds = 0\x0d\x0a\x0d\x0aprivate String city\x0d\x0a\x0d\x0aprivate GregorianCalendar calendar\x0d\x0a\x0d\x0aThread t\x0d\x0a\x0d\x0apublic ClockCanvas(String c, String tz) {\x0d\x0acity = c\x0d\x0a//也可以通过TimeZone.setTimeZone(String n)函数改变时区,n为时区参数名。\x0d\x0acalendar = new GregorianCalendar(TimeZone.getTimeZone(tz))\x0d\x0at = new Thread(this)\x0d\x0at.start()\x0d\x0asetSize(125, 125)// 设置画布大小\x0d\x0asetBackground(Color.black)\x0d\x0a}\x0d\x0a\x0d\x0a// 重写父类的方法绘制时钟图形\x0d\x0apublic void paint(Graphics g) {\x0d\x0aGraphics2Dg2d = (Graphics2D) g\x0d\x0aBasicStroke bstroke = new BasicStroke(2.0f)\x0d\x0ag2d.setStroke(bstroke)\x0d\x0ag2d.setColor(Color.green)\x0d\x0ag2d.drawOval(0, 0, 100, 100)\x0d\x0abstroke = new BasicStroke(5.0f)\x0d\x0ag2d.setStroke(bstroke)\x0d\x0ag2d.drawLine(50, 0, 50, 5)\x0d\x0ag2d.drawLine(0, 50, 5, 50)\x0d\x0ag2d.drawLine(50, 95, 50, 98)\x0d\x0ag2d.drawLine(95, 50, 98, 50)\x0d\x0adouble hourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60)\x0d\x0a/ (12 * 60 * 60)\x0d\x0adouble minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60)\x0d\x0adouble secondAngle = 2 * Math.PI * (seconds - 15) / (60)\x0d\x0abstroke = new BasicStroke(5.0f)\x0d\x0ag2d.setStroke(bstroke)\x0d\x0ag2d.drawLine(50, 50, 50 + (int) (30 * Math.cos(hourAngle)),\x0d\x0a50 + (int) (30 * Math.sin(hourAngle)))\x0d\x0abstroke = new BasicStroke(3.0f)\x0d\x0ag2d.setStroke(bstroke)\x0d\x0ag2d.drawLine(50, 50, 50 + (int) (40 * Math.cos(minuteAngle)),\x0d\x0a50 + (int) (40 * Math.sin(minuteAngle)))\x0d\x0abstroke = new BasicStroke(1.0f)\x0d\x0ag2d.setStroke(bstroke)\x0d\x0ag2d.drawLine(50, 50, 50 + (int) (45 * Math.cos(secondAngle)),\x0d\x0a50 + (int) (45 * Math.sin(secondAngle)))\x0d\x0ag2d.setColor(Color.red)\x0d\x0ag2d.drawString(city, 35, 115)\x0d\x0a}\x0d\x0a\x0d\x0apublic void timeElapsed() {\x0d\x0a//new Date()()获得当前时间\x0d\x0aSystem.out.println(new Date()())\x0d\x0acalendar.setTime(new Date()())\x0d\x0aseconds = calendar.get(Calendar.HOUR) * 60 * 60\x0d\x0a+ calendar.get(Calendar.MINUTE) * 60\x0d\x0a+ calendar.get(Calendar.SECOND)\x0d\x0a}\x0d\x0a\x0d\x0apublic void run() {\x0d\x0atry {\x0d\x0awhile (true) {\x0d\x0aThread.sleep(300)\x0d\x0atimeElapsed()\x0d\x0arepaint()\x0d\x0a}\x0d\x0a} catch (InterruptedException e) {\x0d\x0a}\x0d\x0a}\x0d\x0a}

在Java中,如何获取不同时区的当前时间?你知道这道题的正确答案应该如何回答吗?背后的原理又是什么呢?然后,紧接着,我又提出了以下问题:为什么以下代码无法得到美国时间。

(在东八区的计算机上)接下来,java课程培训机构http://www.kmbdqn.cn/就围绕这两个问题,来带领读者一起学习一下哪些和Java中的时间有关的概念。

时区前面提到了时区,可能很多读者不知道什么是时区,先来简单介绍一下。

时区是地球上的区域使用同一个时间定义。

以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。

1863年,首次使用时区的概念。

时区通过设立一个区域的标准时间部分地解决了这个问题。

世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。

这些偏差就是所谓的时差。

为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。

有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。

在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。

当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时)接下来,本文就围绕这两个问题,来带领读者一起学习一下哪些和Java中的时间有关的概念。

时区前面提到了时区,可能很多读者不知道什么是时区,先来简单介绍一下。

时区是地球上的区域使用同一个时间定义。

以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。

1863年,首次使用时区的概念。

时区通过设立一个区域的标准时间部分地解决了这个问题。

世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。

这些偏差就是所谓的时差。

为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。

有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。

在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。

当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时

//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。

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) {

Graphics2Dg2d = (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) {

}

}

}