| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2295 人关注过本帖
标题:[求助]急~~如何实现对系统时间的修改……
只看楼主 加入收藏
litchijoy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-12-16
收藏
 问题点数:0 回复次数:5 
[求助]急~~如何实现对系统时间的修改……

学校搞课程设计,做了一个Clock,
可是不知道应该如何实现对系统时间的修改……
周末就要交程序了……
请各位高手帮个忙啊……
谢谢了…………

搜索更多相关主题的帖子: 系统 时间 
2005-12-16 09:20
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
try {
java.lang.Runtime.getRuntime().exec("cmd /c time 22:10:44");
} catch (java.io.IOException e)
{
e.printStackTrace();
}
2005-12-16 10:02
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
1.2 日期类Date

  Java在日期类中封装了有关日期和时间的信息,用户可以通过调用相应的方法来获取系统时间或设置日期和时间。Date类中有很多方法在JDK1.0公布后已经过时了,在8.3中我们将介绍JDK1.0中新加的用于替代Date的功能的其它类。
  在日期类中共定义了六种构造函数。
  (1)public Date()
  创建的日期类对象的日期时间被设置成创建时刻相对应的日期时间。
  例 Date today=new Date();//today被设置成创建时刻相对应的日期时间。
  (2)public Date (long date)
  long 型的参数date可以通过调用Date类中的static方法parse(String s)来获得。
  例 long l=Date.parse("Mon 6 Jan 1997 13:3:00");
    Date day=new Date(l);
  //day中时间为1997年 1月6号星期一,13:3:00。
  (3)public Date(String s)
  按字符串s产生一日期对象。s的格式与方法parse中字符串参数的模式相同。
  例 Date day=new Date("Mon 6 Jan 1997 13:3:00");
  //day 中时间为1997年1月6号星期一,13:3:00.
  (4)public Date(int year,int month,int date)
  (5)public Date(int year,int month,int date,int hrs,int min)
  (6)public Date(int year,int month,int date,int hrs,int min,int sec)
  按给定的参数创建一日期对象。
  参数说明:
  year的值为:需设定的年份-1900。例如需设定的年份是1997则year的值应为97,即1997-1900的结果。所以Date中可设定的年份最小为1900;
  month的值域为0~11,0代表1月,11表代表12月;
  date的值域在1~31之间;
  hrs的值域在0~23之间。从午夜到次日凌晨1点间hrs=0,从中午到下午1点间hrs=12;
  min和sec的值域在0~59之间。
  例 Date day=new Date(11,3,4);
  //day中的时间为:04-Apr-11 12:00:00 AM
另外,还可以给出不正确的参数。
  例 设定时间为1910年2月30日,它将被解释成3月2日。
  Date day=new Date(10,1,30,10,12,34);
  System.out.println("Day's date is:"+day);
  //打印结果为:Day's date is:Web Mar 02 10:13:34 GMT+08:00 1910
  下面我们给出一些Date类中常用方法。
  (1)public static long UTC(int year,int month,int date,int hrs. int min,int sec)
  该方法将利用给定参数计算UTC值。UTC是一种计时体制,与GMT(格林威治时间)的计时体系略有差别。UTC计时体系是基于原子时钟的,而GTMT计时体系是基于天文学观测的。计算中使用的一般为GMT计时体系。
  (2)public static long parse(String s)
  该方法将字符串s转换成一个long型的日期。在介绍构造方法Date(long date)时曾使用过这个方法。
  字符串s有一定的格式,一般为:
  (星期 日 年 时间GMT+时区)
  若不注明时区,则为本地时区。
  (3)public void setMonth(int month)
  (4)public int getMonth()
  这两个方法分别为设定和获取月份值。
  获取的月份的值域为0~11,0代表1月,11代表12月。
  (5)public String toString()
  (6)public String toLocalString()
  (7)public String toGMTString()
  将给定日期对象转换成不同格式的字符串。它们对应的具体的格式可参看例子8.1。
  (8)public int getTimezoneOffset()
  该方法用于获取日期对象的时区偏移量。
  例8.1中对上面介绍的Date类中的基本方法进行了具体的应用,并打印了相应的结果。由于使用了一些过时的方法,所以编译时会有警告信息。另外,由于本例中的时间表示与平台有关,不同的JDK版本对此处理不完全相同,因此不同版本的JDK执行本例的结果可能有细微差异。
  例1.1 DateApp.java
  import java.lang.System;
  import java.util.Date;
  public class DateApp{
   public static void main(String args[]){
    Date today=new Date();
    //today中的日期被设成创建时刻的日期和时间,假设创建时刻为1997年3月
    //23日17时51分54秒。
    System.out.println("Today's date is "+today);
    //返回一般的时间表示法,本例中结果为
    //Today's date is Fri May 23 17:51:54 1997
    System.out.println("Today's date(Internet GMT)is:"
     +today.toGMTString());
    //返回结果为GMT时间表示法,本例中结果为
    //Today's date(Internet GMT)is: 23 May 1997 09:51:54:GMT
    System.out.println("Today's date(Locale) is:"
     +today.toLocaleString());
    //返回结果为本地习惯的时间表示法,结果为
    //Today's date(Locale)is:05/23/97 17:51:54
    System.out.println("Today's year is: "+today.getYear());
    System.out.println("Today's month is: "+(today.getMonth()+1));
    System.out.println("Today's date is: "+today.getDate());
    //调用Date类中方法,获取年月日的值。
    //下面调用了不同的构造方法来创建Date类的对象。
    Date day1=new Date(100,1,23,10,12,34);
    System.out.println("Day1's date is: "+day1);
    Date day2=new Date("Sat 12 Aug 1996 13:3:00");
    System.out.println("Day2's date is: "+day2);
    long l= Date.parse("Sat 5 Aug 1996 13:3:00 GMT+0800");
    Date day3= new Date(l);
    System.out.println("Day3's date(GMT)is: "+day3.toGMTString());
    System.out.println("Day3's date(Locale)is: "
     +day3.toLocaleString());
    System.out.println("Day3's time zone offset is:"
     +day3.getTimezoneOffset());
   }
  }

  运行结果(JDK1.3版,与原文不同,原文是JDK1.0版):
  E:\java\tutorial\java01>java DateApp
  Today's date is Thu Dec 27 17:58:16 CST 2001
  Today's date(Internet GMT)is:27 Dec 2001 09:58:16 GMT
  Today's date(Locale) is:2001-12-27 17:58:16
  Today's year is: 101
  Today's month is: 12
  Today's date is: 27
  Day1's date is: Wed Feb 23 10:12:34 CST 2000
  Day2's date is: Fri Aug 12 13:03:00 CST 1996
  Day3's date(GMT)is: 5 Aug 1996 05:03:00 GMT
  Day3's date(Locale)is: 1996-8-5 13:03:00
  Day3's time zone offset is:-480

  E:\java\tutorial\java01>
2005-12-16 10:04
live41
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:12442
专家分:0
注 册:2004-7-22
收藏
得分:0 
2005-12-16 10:05
litchijoy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-12-16
收藏
得分:0 
收到~

谢谢了先

回帖1的方法正在实践中~

回帖2的文章已经研读过了……
很有帮助

回帖3给的Blog里内容写的很详细……
正在研究中……


程序正在进一步制作中……

再次对您的详细回复表示忠心的感谢……

鞠躬………………
2005-12-16 11:56
litchijoy
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-12-16
收藏
得分:0 

修改时间已经实现了,
修改过的程序段如下:
class ChangeTime{
ChangeTime(int hou,int min){

String timeString=new String("cmd /c time "+hou+":"+min+":0");

try{java.lang.Runtime.getRuntime().exec(timeString);
}catch (java.io.IOException e) {e.printStackTrace();}
}
}

但是在修改过时间后有时会出现表盘上显示时间不刷新的问题,

我用的是javax.swing.Timer timer=new javax.swing.Timer(1000,new TimeChanged());
实现1秒刷新一次
和Calendar timeNow = Calendar.getInstance();
获取当前时间

附:源程序(我才学JAVA可能编程风格有点乱请谅解)
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.util.*;

public class ClockPart extends JFrame{

//控件和变量的定义
int sec,min,hou;
String strSec,strMin,strHou;
String ap;
Calendar timeNow = Calendar.getInstance();
javax.swing.Timer timer=new javax.swing.Timer(1000,new TimeChanged());
JTextField timeShow=new JTextField(7);
JPanel numberClock=new JPanel();
JButton changeTime=new JButton("修改");
JLabel label = new JLabel("系统时间:",JLabel.RIGHT);
Font font=new Font("宋体",Font.BOLD, 15);
DrawClock drawClock=new DrawClock();


//构造方法
ClockPart(){
//组件初始设置
this.setTitle("时钟啊时钟");
this.setSize(350,350);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


//组件初始设置
label.setFont(new Font("仿宋_GB2312",Font.BOLD,20));
changeTime.setFont(font);
changeTime.addActionListener(new ChangeTimeAction());
timeShow.setEditable(false);

//数字式时钟面板的组件添加
numberClock.add(label);
numberClock.add(timeShow);
numberClock.add(changeTime);

//添加控件到面版
this.getContentPane().add("Center",drawClock);
this.getContentPane().add("South",numberClock);

//设置初始显示时间
GetTime t=new GetTime(timeShow);

this.setVisible(true);

//时间刷新的实现
timer.start();

}


//指针式时钟布局
class DrawClock extends JPanel{

int xCenter=350/2;int yCenter=120;
int r=100;
int length=100;
int xSec,ySec,xSec1,ySec1;
int xMin1,yMin1,xMin2,yMin2,xMin3,yMin3,xMin4,yMin4;
int xHou1,yHou1,xHou2,yHou2,xHou3,yHou3,xHou4,yHou4;
int i;

Polygon pClock = new Polygon();
Polygon pMin = new Polygon();
Polygon pHou = new Polygon();

public void paint(Graphics g){

//指针位置的确定
xSec=(int)(xCenter+length*0.68*Math.sin((180-sec*6)*Math.PI/180));
ySec=(int)(yCenter+length*0.68*Math.cos((180-sec*6)*Math.PI/180));
xSec1=(int)(xCenter-length*0.15*Math.sin((180-sec*6)*Math.PI/180));
ySec1=(int)(yCenter-length*0.15*Math.cos((180-sec*6)*Math.PI/180));

xMin1=(int)(xCenter+length*0.6*Math.sin((180-min*6)*Math.PI/180));
yMin1=(int)(yCenter+length*0.6*Math.cos((180-min*6)*Math.PI/180));
xMin2=(int)(xCenter-length*0.04*Math.sin((180-min*6)*Math.PI/180));
yMin2=(int)(yCenter-length*0.04*Math.cos((180-min*6)*Math.PI/180));
xMin3=(int)(xCenter-length*0.04*Math.sin((90-min*6)*Math.PI/180));
yMin3=(int)(yCenter-length*0.04*Math.cos((90-min*6)*Math.PI/180));
xMin4=(int)(xCenter+length*0.04*Math.sin((90-min*6)*Math.PI/180));
yMin4=(int)(yCenter+length*0.04*Math.cos((90-min*6)*Math.PI/180));



xHou1=(int)(xCenter+length*0.4*Math.sin((180-hou*30-min/2)*Math.PI/180));
yHou1=(int)(yCenter+length*0.4*Math.cos((180-hou*30-min/2)*Math.PI/180));
xHou2=(int)(xCenter-length*0.05*Math.sin((180-hou*30-min/2)*Math.PI/180));
yHou2=(int)(yCenter-length*0.05*Math.cos((180-hou*30-min/2)*Math.PI/180));
xHou3=(int)(xCenter-length*0.05*Math.sin((90-hou*30-min/2)*Math.PI/180));
yHou3=(int)(yCenter-length*0.05*Math.cos((90-hou*30-min/2)*Math.PI/180));
xHou4=(int)(xCenter+length*0.05*Math.sin((90-hou*30-min/2)*Math.PI/180));
yHou4=(int)(yCenter+length*0.05*Math.cos((90-hou*30-min/2)*Math.PI/180));



//表盘的显示
//用for循环实现有一定厚度的边框(暂时没有更好的方法)
for (i=1;i<13;i++){
pClock.reset();
g.setColor(new Color(100,255-i*20,255));
pClock.addPoint(xCenter,yCenter+r+i);
pClock.addPoint(xCenter+r+i,yCenter);
pClock.addPoint(xCenter,yCenter-r-i);
pClock.addPoint(xCenter-r-i,yCenter);
g.drawPolygon(pClock);
}

//字符颜色随时间变换
g.setColor(new Color(255,0,10));
g.setFont(font);
g.drawString("6",xCenter-3,yCenter+r-7);
g.drawString("3",xCenter+r-20,yCenter+4);
g.drawString("12",xCenter-9,yCenter-r+20);
g.drawString("9",xCenter-r+15,yCenter+4);
g.setColor(new Color(255,240-sec*4,0));
g.drawString("铭牌",xCenter-15,yCenter-r+60);


//指针的显示

g.setColor(Color.BLACK);
g.drawLine(xCenter,yCenter,xSec,ySec);
g.drawLine(xCenter,yCenter,xSec1,ySec1);

g.setColor(new Color(255,0,100));
pMin.reset();
pMin.addPoint(xMin1,yMin1);
pMin.addPoint(xMin3,yMin3);
pMin.addPoint(xMin2,yMin2);
pMin.addPoint(xMin4,yMin4);
g.fillPolygon(pMin);

g.setColor(new Color(100,255,0));
pHou.reset();
pHou.addPoint(xHou1,yHou1);
pHou.addPoint(xHou3,yHou3);
pHou.addPoint(xHou2,yHou2);
pHou.addPoint(xHou4,yHou4);
g.fillPolygon(pHou);
}
}



//监视器:获取当前时间
class TimeChanged implements ActionListener{
public void actionPerformed(ActionEvent e){
GetTime t=new GetTime(timeShow);}
}


//监视器:时间修改按钮
class ChangeTimeAction implements ActionListener{
int i,newTime,newHou,newMin;
char judgementChar;

public void actionPerformed(ActionEvent e){
//新的时间的输入
String getTime=JOptionPane.showInputDialog(
drawClock,"请输入时间","TTMM");
repaint();
judge:if(getTime!=null){

//判断输入的是不是4位字符
if(getTime.length()!=4){JOptionPane.showMessageDialog(
drawClock,"格式错误\n请按格式输入4位数字","Error",JOptionPane.ERROR_MESSAGE);
repaint();
break judge;
}

//判断输入的是不是数字
for(i=0;i<(getTime.length());i++){
judgementChar=getTime.charAt(i);

//判断当前字符,如果不是数字则跳出该事件
if(!Character.isDigit(judgementChar)){
JOptionPane.showMessageDialog(
drawClock,"格式错误\n请按格式输入:TTMM","Error",JOptionPane.ERROR_MESSAGE);
repaint();break judge;
}
}

//赋值新的小时和分钟变量newHou和newMin
int newTime = Integer.parseInt(getTime);
newHou=(int)(newTime/100);
newMin=newTime-newHou*100;
if( newHou>=24||newHou<0){JOptionPane.showMessageDialog(
drawClock,"格式错误\n小时应该是小于23的正数","Error",JOptionPane.ERROR_MESSAGE);
repaint();break judge;
}
if( newMin>=60||newHou<0){JOptionPane.showMessageDialog(
drawClock,"格式错误\n分钟应该是小于60的正数","Error",JOptionPane.ERROR_MESSAGE);
repaint();break judge;
}
//修改时间的实现
new ChangeTime(newHou,newMin);
}

}
}

//类:获取当前时间
class GetTime{
//将当前时间显示在JTextField上
GetTime(JTextField tf){
timeNow = Calendar.getInstance();
sec=timeNow.get(GregorianCalendar.SECOND);
min=timeNow.get(GregorianCalendar.MINUTE);
hou=timeNow.get(GregorianCalendar.HOUR);

if(timeNow.get(GregorianCalendar.AM_PM) == 1){ap = "PM";}
else{ap = "AM";}
//当时间参数小于10的时候在前面添加字符0
if(sec < 10){
strSec="0"+sec;}
else {
strSec=""+sec;}
if(min < 10){
strMin="0"+min;}
else {
strMin=""+min;}
if(hou < 10){
strHou="0"+hou;}
else {
strHou=""+hou;}

tf.setText(ap+strHou+" :"+strMin+" :"+strSec);
repaint();
}

}


//类:修改时间
class ChangeTime{

ChangeTime(int hou,int min){

String timeString=new String("cmd /c time "+hou+":"+min+":0");

try {
java.lang.Runtime.getRuntime().exec(timeString);
}catch (java.io.IOException e) {e.printStackTrace();}
timer.start();
}
}

public static void main(String[] args){
ClockPart cp=new ClockPart();
}

}

2005-12-16 12:26
快速回复:[求助]急~~如何实现对系统时间的修改……
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018041 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved