回 帖 发 新 帖 刷新版面

主题:电子时钟时区问题

这是我写的电子时钟程序

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.font.*;
import java.util.*;
import java.text.*;
import javax.swing.plaf.*;

class DigitalClock extends JPanel 
{
    
    DigitalClock()
    {
        this.setUI(new DigitalClockPanelUI().createPaneUI(this));
        this.setOpaque(true);
    }
    
    public static void main(String []args)
    {
        JFrame frame=new JFrame();
        frame.setLocation(200,200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        DigitalClock panel=new DigitalClock();
        frame.getContentPane().add(panel);
        frame.pack();
        frame.setVisible(true);
    }

    class DigitalClockPanelUI extends PanelUI implements ActionListener
    {  
        Font clockfont=new Font("Arial",Font.BOLD,24);
        SimpleDateFormat dateformat=new SimpleDateFormat("hh:mm:ss");
        FontRenderContext frc=new FontRenderContext(null,true,true);
        int f=2;
        AttributedString timestring=null;
        TextLayout textlayout=null;
        javax.swing.Timer timer=new javax.swing.Timer(1000,this);
        DigitalClock panel;
    
        DigitalClockPanelUI(){ }

        DigitalClockPanelUI(DigitalClock panel)
        {
            this.panel=panel;
            panel.setBackground(Color.black);
            actionPerformed(null);
            timer.start();
        }
        
        public ComponentUI createPaneUI(JComponent component)
        {
            return new DigitalClockPanelUI((DigitalClock)component);
        }
        
        public void paint(Graphics g,JComponent c)
        {
            if(this.timestring==null||this.textlayout==null) return;
            Graphics2D g2=(Graphics2D)g;
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
            g2.drawString(timestring.getIterator(),1,(int)(textlayout.getAscent()));
            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_DEFAULT);
        }
        
        public void actionPerformed(ActionEvent event)
         {   
            timestring=new AttributedString(dateformat.format(new Date()));
            timestring.addAttribute(TextAttribute.FONT,clockfont);
            timestring.addAttribute(TextAttribute.FOREGROUND,Color.red);
            timestring.addAttribute(TextAttribute.FOREGROUND,Color.yellow,2,3);
            timestring.addAttribute(TextAttribute.FOREGROUND,Color.yellow,5,6);
            textlayout=new TextLayout(timestring.getIterator(),frc);
            panel.repaint();
        }
        
        public Dimension getPreferredSize(JComponent c)
        {
            Dimension size=textlayout.getBounds().getBounds().getSize();
            size.height+=f;
            size.width+=(f+2);
            return size;
        }
   }
}

但是这个显示的时间是以格林威治标准时间为准的,我计算机的时区是北京(GMT+8:00),怎样修改使它自己从系统获得时区,让显示的时间和系统时间一致

回复列表 (共3个回复)

沙发

测试,显示的是我的时间.仔细检查你电脑的设置和JAVA的设置吧,程序没有问题.

板凳

我这也运行正常,我是将系统时区设定为America/New_York了。
你可以让你的程序直接显示时区,这样不就容易判断了吗?

3 楼

tolocalString
simpletimeformat

我来回复

您尚未登录,请登录后再回复。点此登录或注册