在Java中,如何获取不同时区的当前时间你知道这道题的正确答案应该如何回答吗背后的原理又是什么呢
然后,紧接着,我又提出了以下问题:
为什么以下代码无法得到美国时间。(在东八区的计算机上)
接下来,java课程培训机构就围绕这两个问题,来带领读者一起学习一下哪些和Java中的时间有关的概念。
时区
前面提到了时区,可能很多读者不知道什么是时区,先来简单介绍一下。
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。
世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时)
接下来,本文就围绕这两个问题,来带领读者一起学习一下哪些和Java中的时间有关的概念。
时区
前面提到了时区,可能很多读者不知道什么是时区,先来简单介绍一下。
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。
世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
为了照顾到各地区的使用方便,又使其他地方的人容易将本地的时间换算到别的地方时间上去。有关国际会议决定将地球表面按经线从东到西,划成一个个区域,并且规定相邻区域的时间相差1小时。在同一区域内的东端和西端的人看到太阳升起的时间最多相差不过1小时。当人们跨过一个区域,就将自己的时钟校正1小时(向西减1小时,向东加1小时
你获取系统的时间应该得用 SystemcurrentTimeMillis();
你看看是不是用的这个方法。 直接 new Date() 也可以。
或者用 Calendar car = CalendargetInstance(); 也可以
如果获取的是数据库时间 你得看你获取的是不是
Oracle数据库是 SYSDATE
SqlServer数据库是 getDate() 函数
。。。 其他的 可以自己百度
也有可能是你获取时间以后 在后面 加了数字了。仔细检查一下
楼下的
String timestamp = (SystemcurrentTimeMillis() - dgetTime()) / 1000L + 60L;
你的这个d 是什么? 你获得系统毫秒数之后 减去了一个数字之后 除以了1000 就是 秒,秒加上了60 当你换算的时候 按照的还是毫秒算的啊
java类中获取当前时间为Java 虚拟机的时间,一般来说是格林尼治时间,而Oracle根据安装的环境获取到你的主机的时区信息为+8,所以时间上会相差8小时,可以用下面的语句处理
String dateCN = "2011-03-16 20:22:34 GMT+08:00";
SimpleDateFormat sdf_JP = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
sdf_JPsetTimeZone(TimeZonegetTimeZone("GMT+9"));
Systemoutprintln(sdf_JPformat(sdf_JPparse(dateCN)));
Systemoutprintln(sdf_JPformat(new Date()));
getTime()返回的已经是一个UTC的unix timestamp秒数了,与时区无关;而转换为字符串后,就和时区相关了
对于这个秒数,不同时区的人,按照自己所在的时区去解析,就可以得到正确的时间了:
//这是通过网络获取北京时间的方法
javautilLocale locale=javautilLocaleCHINA; //这是获得本地中国时区
String pattern = "yyyy-MM-dd kk:mm:ss zZ";//这是日期格式
javatextSimpleDateFormat df = new javatextSimpleDateFormat(pattern,locale);//设定日期格式
javautilDate date = new javautilDate();
javanetURL url=new URL(">
//我实现一个时钟窗口程序给你了,好让你更容易理解,希望对你有帮助。
import javaawt;
import javaawtevent;
import javautil;
//世界时钟
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();
Systemexit(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;
//也可以通过TimeZonesetTimeZone(String n)函数改变时区,n为时区参数名。
calendar = new GregorianCalendar(TimeZonegetTimeZone(tz));
t = new Thread(this);
tstart();
setSize(125, 125); // 设置画布大小
setBackground(Colorblack);
}
// 重写父类的方法绘制时钟图形
public void paint(Graphics g) {
Graphics2Dg2d = (Graphics2D) g;
BasicStroke bstroke = new BasicStroke(20f);
g2dsetStroke(bstroke);
g2dsetColor(Colorgreen);
g2ddrawOval(0, 0, 100, 100);
bstroke = new BasicStroke(50f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 0, 50, 5);
g2ddrawLine(0, 50, 5, 50);
g2ddrawLine(50, 95, 50, 98);
g2ddrawLine(95, 50, 98, 50);
double hourAngle = 2 MathPI (seconds - 3 60 60)
/ (12 60 60);
double minuteAngle = 2 MathPI (seconds - 15 60) / (60 60);
double secondAngle = 2 MathPI (seconds - 15) / (60);
bstroke = new BasicStroke(50f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (30 Mathcos(hourAngle)),
50 + (int) (30 Mathsin(hourAngle)));
bstroke = new BasicStroke(30f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (40 Mathcos(minuteAngle)),
50 + (int) (40 Mathsin(minuteAngle)));
bstroke = new BasicStroke(10f);
g2dsetStroke(bstroke);
g2ddrawLine(50, 50, 50 + (int) (45 Mathcos(secondAngle)),
50 + (int) (45 Mathsin(secondAngle)));
g2dsetColor(Colorred);
g2ddrawString(city, 35, 115);
}
public void timeElapsed() {
//new Date()()获得当前时间
Systemoutprintln(new Date()());
calendarsetTime(new Date()());
seconds = calendarget(CalendarHOUR) 60 60
+ calendarget(CalendarMINUTE) 60
+ calendarget(CalendarSECOND);
}
public void run() {
try {
while (true) {
Threadsleep(300);
timeElapsed();
repaint();
}
} catch (InterruptedException e) {
}
}
}
以上就是关于Java中的时间处理全部的内容,包括:Java中的时间处理、为何java程序运行一段时间后,读取系统时间错误,和实际系统时间时差超过10分钟了、java调oracle 时间不一致等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)