当前位置:文档之家› C语言获取当前系统时间的几种方式

C语言获取当前系统时间的几种方式

C语言获取当前系统时间的几种方式
C语言获取当前系统时间的几种方式

C语言中如何获取时间?精度如何?

1 使用time_t time( time_t * timer ) 精确到秒

2 使用clock_t clock() 得到的是CPU时间精确到1/CLOCKS_PER_SEC秒

3 计算时间差使用double difftime( time_t timer1, time_t timer0 )

4 使用DWORD GetTickCount() 精确到毫秒

5 如果使用MFC的CTime类,可以用CTime::GetCurrentTime() 精确到秒

6 要获取高精度时间,可以使用

BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency)

获取系统的计数器的频率

BOOL QueryPerformanceCounter(LARGE_INTEGER *lpPerformanceCount)

获取计数器的值

然后用两次计数器的差除以Frequency就得到时间。

7 Multimedia Timer Functions

The following functions are used with multimedia timers.

timeBeginPeriod/timeEndPeriod/timeGetDevCaps/timeGetSystemTime

//*********************************************************************

//用标准C实现获取当前系统时间的函数

一.time()函数

time(&rawtime)函数获取当前时间距1970年1月1日的秒数,以秒计数单位,存于rawtime 中。#include "time.h"

void main ()

{

time_t rawtime;

struct tm * timeinfo;

time ( &rawtime );

timeinfo = localtime ( &rawtime );

printf ( "\007The current date/time is: %s", asctime (timeinfo) );

exit(0);

}

=================

#include -- 必须的时间函数头文件

time_t -- 时间类型(time.h 定义是typedef long time_t; 追根溯源,time_t是long)

struct tm -- 时间结构,time.h 定义如下:

int tm_sec;

int tm_min;

int tm_hour;

int tm_mday;

int tm_mon;

int tm_year;

int tm_wday;

int tm_yday;

int tm_isdst;

time ( &rawtime ); -- 获取时间,以秒计,从1970年1月一日起算,存于rawtime

localtime ( &rawtime ); -- 转为当地时间,tm 时间结构

asctime ()-- 转为标准ASCII时间格式:

星期月日时:分:秒年

-----------------------------------------------------------------------------

二.clock()函数,用clock()函数,得到系统启动以后的毫秒级时间,然后除以CLOCKS_PER_SEC,就可以换成“秒”,标准c函数。

clock_t clock ( void );

#include

clock_t t = clock();

long sec = t / CLOCKS_PER_SEC;

他是记录时钟周期的,实现看来不会很精确,需要试验验证;

---------------------------------------------------------------------------

三.gettime(&t); 据说tc2.0的time结构含有毫秒信息

#include

#include

int main(void)

{

struct time t;

gettime(&t);

printf("The current time is: -:d:d.d\n",

t.ti_hour, t.ti_min, t.ti_sec, t.ti_hund);

return 0;

}

time 是一个结构体,,其中成员函数ti_hund 是毫秒。。。

--------------------------------------------------------------------------------

四.GetTickCount(),这个是windows里面常用来计算程序运行时间的函数;DWORD dwStart = GetTickCount();

//这里运行你的程序代码

DWORD dwEnd = GetTickCount();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

这个函数只精确到55ms,1个tick就是55ms。

--------------------------------------------------------------------------------

五.timeGetTime()t,imeGetTime()基本等于GetTickCount(),但是精度更高DWORD dwStart = timeGetTime();

//这里运行你的程序代码

DWORD dwEnd = timeGetTime();

则(dwEnd-dwStart)就是你的程序运行时间, 以毫秒为单位

虽然返回的值单位应该是ms,但传说精度只有10ms。

=========================================

//*****************************************************************Unix

##unix时间相关,也是标准库的

//*********************************************************************

1.timegm函数只是将struct tm结构转成time_t结构,不使用时区信息;

time_t timegm(struct tm *tm);

2.mktime使用时区信息

time_t mktime(struct tm *tm);

timelocal 函数是GNU扩展的与posix函数mktime相当

time_t timelocal (struct tm *tm);

3.gmtime函数只是将time_t结构转成struct tm结构,不使用时区信息;

struct tm * gmtime(const time_t *clock);

4.localtime使用时区信息

struct tm * localtime(const time_t *clock);

1.time获取时间,stime设置时间

time_t t;

t = time(&t);

2.stime其参数应该是GMT时间,根据本地时区设置为本地时间;

int stime(time_t *tp)

3.UTC=true 表示采用夏时制;

4.文件的修改时间等信息全部采用GMT时间存放,不同的系统在得到修改时间后通过localtime 转换成本地时间;

5.设置时区推荐使用setup来设置;

6.设置时区也可以先更变/etc/sysconfig/clock中的设置再将ln -fs /usr/share/zoneinfo/xxxx/xxx /etc/localtime 才能重效

time_t只能表示68年的范围,即mktime只能返回1970-2038这一段范围的time_t

看看你的系统是否有time_t64,它能表示更大的时间范围

//***************************************************************windows

##Window里面的一些不一样的

//*********************************************************************

一.CTime () 类

VC编程一般使用CTime类获得当前日期和时间

CTime t = GetCurrentTime();

SYSTEMTIME 结构包含毫秒信息

typedef struct _SYSTEMTIME {

WORD wYear;

WORD wMonth;

WORD wDayOfWeek;

WORD wDay;

WORD wHour;

WORD wMinute;

WORD wSecond;

WORD wMilliseconds;

} SYSTEMTIME, *PSYSTEMTIME;

SYSTEMTIME t1;

GetSystemTime(&t1)

CTime curTime(t1);

WORD ms = t1.wMilliseconds;

SYSTEMTIME sysTm;

::GetLocalTime(&sysTm);

在time.h中的_strtime() //只能在windows中用

char t[11];

_strtime(t);

puts(t);

//*****************************

获得当前日期和时间

CTime tm=CTime::GetCurrentTime();

CString str=tm.Format("%Y-%m-%d");

在VC中,我们可以借助CTime时间类,获取系统当前日期,具体使用方法如下:CTime t = CTime::GetCurrentTime(); //获取系统日期,存储在t里面

int d=t.GetDay(); //获得当前日期

int y=t.GetYear(); //获取当前年份

int m=t.GetMonth(); //获取当前月份

int h=t.GetHour(); //获取当前为几时

int mm=t.GetMinute(); //获取当前分钟

int s=t.GetSecond(); //获取当前秒

int w=t.GetDayOfWeek(); //获取星期几,注意1为星期天,7为星期六

二.CTimeSpan类

如果想计算两段时间的差值,可以使用CTimeSpan类,具体使用方法如下:CTime t1( 1999, 3, 19, 22, 15, 0 );

CTime t = CTime::GetCurrentTime();

CTimeSpan span=t-t1; //计算当前系统时间与时间t1的间隔

int iDay=span.GetDays(); //获取这段时间间隔共有多少天

int iHour=span.GetTotalHours(); //获取总共有多少小时

int iMin=span.GetTotalMinutes();//获取总共有多少分钟

int iSec=span.GetTotalSeconds();//获取总共有多少秒

------------------------------------------------------------------------------

三._timeb()函数

_timeb定义在SYS\TIMEB.H,有四个fields

dstflag

millitm

time

timezone

void _ftime( struct _timeb *timeptr );

struct _timeb timebuffer;

_ftime( &timebuffer );

取当前时间:文档讲可以到ms,有人测试,好象只能到16ms!

四.设置计时器

定义TIMER ID

#define TIMERID_JISUANFANGSHI 2

在适当的地方设置时钟,需要开始其作用的地方;

SetTimer(TIMERID_JISUANFANGSHI,200,NULL);

在不需要定时器的时候的时候销毁掉时钟

KillTimer(TIMERID_JISUANFANGSHI);

对应VC程序的消息映射

void CJisuan::OnTimer(UINT nIDEvent)

{switch(nIDEvent)}

---------------------------------------------------------------------------------------##如何设定当前系统时间---------------------------------------windows SYSTEMTIME m_myLocalTime,*lpSystemTime;

m_myLocalTime.wYear=2003;

m_myLocalTime.wM;

m_myLocalTime.wDay=1;

m_myLocalTime.wHour=0;

m_myLocalTime.wMinute=0;

m_myLocalTime.wSec;

m_myLocalTime.wMillisec;

lpSystemTime=&m_myLocalTime;

if( SetLocalTime(lpSystemTime) ) //此处换成SetSystemTime( )也不行MessageBox("OK !");

else

MessageBox("Error !");

SYSTEMTIME m_myLocalTime,*lpSystemTime;

m_myLocalTime.wYear=2003;

m_myLocalTime.wM;

m_myLocalTime.wDay=1;

lpSystemTime=&m_myLocalTime;

if( SetDate(lpSystemTime) ) //此处换成SetSystemTime( )也不行MessageBox("OK !");

else

MessageBox("Error !");

本文来自CSDN博客,转载请标明出处:https://www.doczj.com/doc/6e8278648.html,/khuang2008/archive/2008/12/09/3483274.aspx

一种制作微秒级精度定时器的方法

当使用定时器时,在很多情况下只用到毫秒级的时间间隔,所以只需用到下面的两种常用方式就满足要求了。一是用SetTimer函数建立一个定时器后,在程序中通过处理由定时器发送到线程消息队列中的WM_TIMER消息,而得到定时的效果(退出程序时别忘了调用和SetTimer配对使用的KillTimer函数)。二是利用GetTickCount函数可以返回自计算机启动后的时间,通过两次调用GetTickCount函数,然后控制它们的差值来取得定时效果,此方式跟第一种方式一样,精度也是毫秒级的。

用这两种方式取得的定时效果虽然在许多场合已经满足实际的要求,但由于它们的精度只有毫秒级的,而且在要求定时时间间隔小时,实际定时误差大。下面介绍一种能取得高精度定时的方法。

在一些计算机硬件系统中,包含有高精度运行计数器(high-resolution performance counter),利用它可以获得高精度定时间隔,其精度与CPU的时钟频率有关。采用这种方法的步骤如下:

1、首先调用QueryPerformanceFrequency函数取得高精度运行计数器的频率f。单位是每秒多少次(n/s),此数一般很大。

2、在需要定时的代码的两端分别调用QueryPerformanceCounter以取得高精度运行计数器的数值n1,n2。两次数值的差值通过f换算成时间间隔,t=(n2-n1)/f。

下面举一个例子来演示这种方法的使用及它的精确度。

在VC 6.0 下用MFC建立一个对话框工程,取名为HightTimer.在对话框面板中控件的布局如下图:

其中包含两个静态文本框,两个编辑框和两个按纽。上面和下面位置的编辑框的ID分别为IDC_E_TEST和IDC_E_ACTUAL,通过MFC ClassWizard添加的成员变量也分别对应为DWORD m_dwTest和DWORD m_dwAct. “退出”按纽的ID为IDOK,“开始测试”按纽ID为IDC_B_TEST,用MFC ClassWizard添加此按纽的单击消息处理函数如下:

void CHightTimerDlg::OnBTest()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE); //取输入的测试时间值到与编辑框相关联的成员变量m_dwTest中

LARGE_INTEGER frequence;

if(!QueryPerformanceFrequency( &frequence)) //取高精度运行计数器的频率,若硬件不支持则返回FALSE

MessageBox("Your computer hardware doesn't support the high-resolution performance counter", "Not Support", MB_ICONEXCLAMATION | MB_OK);

LARGE_INTEGER test, ret;

test.QuadPart = frequence.QuadPart * m_dwTest / 1000000; //通过频率换算微秒数到对应的数量(与CPU时钟有关),1秒=1000000微秒

ret = MySleep( test ); //调用此函数开始延时,返回实际花销的数量

m_dwAct = (DWORD)(1000000 * ret.QuadPart / frequence.QuadPart ); //换算到微秒数

UpdateData(FALSE); //显示到对话框面板

}

其中上面调用的MySleep函数如下:

LARGE_INTEGER CHightTimerDlg::MySleep(LARGE_INTEGER Interval)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 功能:执行实际的延时功能

// 参数:Interval 参数为需要执行的延时与时间有关的数量

// 返回值:返回此函数执行后实际所用的时间有关的数量

///////////////////////////////////////////////////////////////////////////////////////////////////////////

{

LARGE_INTEGER privious, current, Elapse;

QueryPerformanceCounter( &privious );

current = privious;

while( current.QuadPart - privious.QuadPart < Interval.QuadPart )

QueryPerformanceCounter( ¤t );

Elapse.QuadPart = current.QuadPart - privious.QuadPart;

return Elapse;

}

注:别忘了在头文件中为此函数添加函数声明。

至此,可以编译和执行此工程了,结果如上图所示。在本人所用的机上(奔腾366,64M内存)测试,当测试时间超过3微秒时,准确度已经非常高了,此时机器执行本身延时函数代码的时间对需要延时的时间影响很小了。

上面的函数由于演示测试的需要,没有在函数级封装,下面给出的函数基本上可以以全局函数的形式照搬到别的程序中。

BOOL MySleep(DWORD dwInterval)

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

// 功能:执行微秒级的延时功能

// 参数:Interval 参数为需要的延时数(单位:微秒)

// 返回值:若计算机硬件不支持此功能,返回FALSE,若函数执行成功,返回TRUE

///////////////////////////////////////////////////////////////////////////////////////////////////////////

{

BOOL bNormal = TRUE;

LARGE_INTEGER frequence, privious, current, interval;

if(!QueryPerformanceFrequency( &frequence))

{

::MessageBox(NULL, "Your computer hardware doesn't support the high-resolution performance counter",

"Not Support", MB_ICONEXCLAMATION | MB_OK); //或其它的提示信息

return FALSE;

interval.QuadPart = frequence.QuadPart * dwInterval / 1000000;

bNormal = bNormal && QueryPerformanceCounter( &privious );

current = privious;

while( current.QuadPart - privious.QuadPart < interval.QuadPart )

bNormal = bNormal && QueryPerformanceCounter( ¤t );

return bNormal;

}

需要指出的是,由于在此函数中的代码很多,机器在执行这些代码所花费的时间也很长,所以在需要几个微秒的延时时,会影响精度。实际上,读者在熟悉这种方法后,只要使用QueryPerformanceFrequency和QueryPerformanceCounter这两个函数就能按实际需要写出自己的延时代码了。

使用CPU时间戳进行高精度计时

对关注性能的程序开发人员而言,一个好的计时部件既是益友,也是良师。计时器既可以作为程序组件帮助程序员精确的控制程序进程,又是一件有力的调试武器,在有经验的程序员手里可以尽快的确定程序的性能瓶颈,或者对不同的算法作出有说服力的性能比较。

在Windows平台下,常用的计时器有两种,一种是timeGetTime多媒体计时器,它可以提供毫秒级的计时。但这个精度对很多应用场合而言还是太粗糙了。另一种是QueryPerformanceCount 计数器,随系统的不同可以提供微秒级的计数。对于实时图形处理、多媒体数据流处理、或者实时系统构造的程序员,善用QueryPerformanceCount/QueryPerformanceFrequency是一项基本功。

本文要介绍的,是另一种直接利用Pentium CPU内部时间戳进行计时的高精度计时手段。以下讨论主要得益于《Windows图形编程》一书,第15页-17页,有兴趣的读者可以直接参考该书。关于RDTSC指令的详细讨论,可以参考Intel产品手册。本文仅仅作抛砖之用。

在Intel Pentium以上级别的CPU中,有一个称为“时间戳(Time Stamp)”的部件,它以64位无符号整型数的格式,记录了自CPU上电以来所经过的时钟周期数。由于目前的CPU主频都非常高,因此这个部件可以达到纳秒级的计时精度。这个精确性是上述两种方法所无法比拟的。

在Pentium以上的CPU中,提供了一条机器指令RDTSC(Read Time Stamp Counter)来读取这个时间戳的数字,并将其保存在EDX:EAX寄存器对中。由于EDX:EAX寄存器对恰好是Win32平台下C++语言保存函数返回值的寄存器,所以我们可以把这条指令看成是一个普通的函数调用。像这样:

inline unsigned __int64 GetCycleCount()

{

__asm RDTSC

}

但是不行,因为RDTSC不被C++的内嵌汇编器直接支持,所以我们要用_emit伪指令直接嵌入该指令的机器码形式0X0F、0X31,如下:

inline unsigned __int64 GetCycleCount()

{

__asm _emit 0x0F

__asm _emit 0x31

}

以后在需要计数器的场合,可以像使用普通的Win32 API一样,调用两次GetCycleCount函数,比较两个返回值的差,像这样:

unsigned long t;

t = (unsigned long)GetCycleCount();

//Do Something time-intensive ...

t -= (unsigned long)GetCycleCount();

《Windows图形编程》第15页编写了一个类,把这个计数器封装起来。有兴趣的读者可以去参考那个类的代码。作者为了更精确的定时,做了一点小小的改进,把执行RDTSC指令的时间,通过连续两次调用GetCycleCount函数计算出来并保存了起来,以后每次计时结束后,都从实际得到的计数中减掉这一小段时间,以得到更准确的计时数字。但我个人觉得这一点点改进意

义不大。在我的机器上实测,这条指令大概花掉了几十到100多个周期,在Celeron 800MHz的机器上,这不过是十分之一微秒的时间。对大多数应用来说,这点时间完全可以忽略不计;而对那些确实要精确到纳秒数量级的应用来说,这个补偿也过于粗糙了。

这个方法的优点是:

1.高精度。可以直接达到纳秒级的计时精度(在1GHz的CPU上每个时钟周期就是一纳秒),这是其他计时方法所难以企及的。

2.成本低。timeGetTime 函数需要链接多媒体库winmm.lib,QueryPerformance* 函数根据MSDN 的说明,需要硬件的支持(虽然我还没有见过不支持的机器)和KERNEL库的支持,所以二者都只能在Windows平台下使用(关于DOS平台下的高精度计时问题,可以参考《图形程序开发人员指南》,里面有关于控制定时器8253的详细说明)。但RDTSC指令是一条CPU指令,凡是i386平台下Pentium以上的机器均支持,甚至没有平台的限制(我相信i386版本UNIX和Linux 下这个方法同样适用,但没有条件试验),而且函数调用的开销是最小的。

3.具有和CPU主频直接对应的速率关系。一个计数相当于1/(CPU主频Hz数)秒,这样只要知道了CPU的主频,可以直接计算出时间。这和QueryPerformanceCount不同,后者需要通过QueryPerformanceFrequency获取当前计数器每秒的计数次数才能换算成时间。

这个方法的缺点是:

1.现有的C/C++编译器多数不直接支持使用RDTSC指令,需要用直接嵌入机器码的方式编程,比较麻烦。

2.数据抖动比较厉害。其实对任何计量手段而言,精度和稳定性永远是一对矛盾。如果用低精度的timeGetTime来计时,基本上每次计时的结果都是相同的;而RDTSC指令每次结果都不一样,经常有几百甚至上千的差距。这是这种方法高精度本身固有的矛盾。

关于这个方法计时的最大长度,我们可以简单的用下列公式计算:

自CPU上电以来的秒数= RDTSC读出的周期数/ CPU主频速率(Hz)

64位无符号整数所能表达的最大数字是1.8×10^19,在我的Celeron 800上可以计时大约700年(书中说可以在200MHz的Pentium上计时117年,这个数字不知道是怎么得出来的,与我的计算有出入)。无论如何,我们大可不必关心溢出的问题。

下面是几个小例子,简要比较了三种计时方法的用法与精度

//Timer1.cpp 使用了RDTSC指令的Timer类//KTimer类的定义可以参见《Windows图形编程》P15

//编译行:CL Timer1.cpp /link USER32.lib

#include

#include "KTimer.h"

main()

{

unsigned t;

KTimer timer;

timer.Start();

Sleep(1000);

t = timer.Stop();

printf("Lasting Time: %d\n",t);

}

//Timer2.cpp 使用了timeGetTime函数

//需包含,但由于Windows头文件错综复杂的关系//简单包含比较偷懒:)

//编译行:CL timer2.cpp /link winmm.lib

#include

#include

main()

{

DWORD t1, t2;

t1 = timeGetTime();

Sleep(1000);

t2 = timeGetTime();

printf("Begin Time: %u\n", t1);

printf("End Time: %u\n", t2);

printf("Lasting Time: %u\n",(t2-t1));

}

//Timer3.cpp 使用了QueryPerformanceCounter函数

//编译行:CL timer3.cpp /link KERNEl32.lib

#include

#include

main()

{

LARGE_INTEGER t1, t2, tc; QueryPerformanceFrequency(&tc);

printf("Frequency: %u\n", tc.QuadPart); QueryPerformanceCounter(&t1);

Sleep(1000);

QueryPerformanceCounter(&t2);

printf("Begin Time: %u\n", t1.QuadPart);

printf("End Time: %u\n", t2.QuadPart);

printf("Lasting Time: %u\n",( t2.QuadPart- t1.QuadPart));

}

////////////////////////////////////////////////

//以上三个示例程序都是测试1秒钟休眠所耗费的时间

file://测/试环境:Celeron 800MHz / 256M SDRAM

// Windows 2000 Professional SP2

// Microsoft Visual C++ 6.0 SP5

////////////////////////////////////////////////

以下是Timer1的运行结果,使用的是高精度的RDTSC指令Lasting Time: 804586872

以下是Timer2的运行结果,使用的是最粗糙的timeGetTime API Begin Time: 20254254

End Time: 20255255

Lasting Time: 1001

以下是Timer3的运行结果,使用的是QueryPerformanceCount API Frequency: 3579545

Begin Time: 3804729124

End Time: 3808298836

Lasting Time: 3569712

HTML中获得当前日期时间星期代码

这代码本人早已使用,现共享一下。

C获取系统时间及时间格式

1、新建一个windows form 窗体应用程序。 2、在该窗体加载时,输入如下代码 [csharp] view plaincopy Thread P_thread = new Thread( () => //lambda表达式(参数列表)=>{执行语句} lambda表达式是比匿名方法更加简洁的一种匿名函数语法 { while (true) {//public Object Invoke (Delegate method)在(拥有此控件的基础窗口句柄的)线程上执行指定的委托。 //关于为何使用invoke方法,参见C#中跨线程调用控件的线程安全性方法一文 this.Invoke( (MethodInvoker)delegate()//methodinvoke 表示一个委托,该委托可执行托管代码中声明为void 且不接受任何参数的任何方法。 //在对控件的Invoke 方法进行调用时或需要一个简单委托又不想自己定义时可以使用该委托。 { this.Refresh(); Graphics P_Graphics = CreateGraphics(); // Control.CreateGraphics方法,为控件创建Graphics。 //public Graphics CreateGraphics () 返回值为控件的Graphics。Graphics 类提供将对象绘制到显示设备的方法 //public void DrawString( // string s, // Font font, // Brush brush, // PointF point //)在指定位置point并且用指定的Brush 和Font 对象绘制指定的文本字符串s。 P_Graphics.DrawString("系统时间:" + DateTime.Now.ToString("yyyy年MM月dd日HH时mm分ss秒"), new Font("宋体", 15), Brushes.Blue, new Point(10, 10)); });//this.invoke Thread.Sleep(1000); }//while

基于java Web 的在线拍卖系统

华北科技学院 课程设计说明书 技能训练类(三) 学号:201207034102 班级: 信管B121 姓名:何欢 设计题目:_____在线拍卖系统________________ 设计地点:____基础五_______________________ 设计时间: 2015.3.10 至2015.4.17 成绩评定: 1、工作量: A(),B(),C(),D(),F( ) 2、难易度:A(),B(),C(),D(),F( ) 3、答辩情况: 基本操作:A(),B(),C(),D(),F( ) 代码理解:A(),B(),C(),D(),F( ) 4、报告规范度:A(),B(),C(),D(),F( ) 5、学习态度:A(),B(),C(),D(),F( ) 总评成绩:_________________________________ 指导教师:_________________________________

1、课程设计的目的 技能训练的内容围绕一个信息管理系统的实际开发过程进行组织,重点在于程序设计开发部分。信息管理系统的题目由教师指定或学生自行拟定,学生根据教师提出的系统在应用环境、系统规模、数据量、业务流程等方面的要求,进行需求分析、数据库设计、数据库实施、程序开发和测试,最终完成系统。 技能训练的目的和要求: (1)使学生巩固和加强《java基础》与《》课程的理论知识。 (2)使学生掌握程序设计开发的步骤。 (3)使学生掌握model2以上的开发系统的方法。 (4)使学生掌握使用数据库管理信息数据的方法。 (5)使学生掌握使用JA V A等程序设计语言连接和操作数据库的方法。 (6)使学生掌握调试程序的基本方法及上机操作方法。 (7)使学生初步掌握开发一个小型信息管理系统的基本步骤,引导学生根据实际业务流程和需求进行系统分析与设计,并建立需要的数据库,最后通过编写代码和调试完成系统。 2、软件需求分析和总体设计 2.1软件功能 拍卖系统是一个在线系统,系统设计为B/S模式,用户在浏览器请求服务端的资源。包含的功能有: ①查看竟得物品 ②浏览流拍物品 ③管理种类 ④管理物品 ⑤浏览拍卖物品 ⑥查看自己的竞标 功能模块框图下图所示(图2-1-1):

JAVA中获取当前时间

Java中获得当前时间的方法 2008年06月16日星期一下午 10:06 有两种方法: 方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import java.text.*; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就默认汉语就可以了,时间日期的格式默认为MEDIUM风格,比如:2008-6-16 20:54:53 //以下显示的日期时间都是再Date类的基础上的来的,还可以利用Calendar类来实现见类TestDate2.java public class TestDate { public static void main(String[] args) { Date now = new Date(); Calendar cal = Calendar.getInstance(); DateFormat d1 = DateFormat.getDateInstance(); //默认语言(汉语)下的默认风格(MEDIUM风格,比如:2008-6-16 20:54:53) String str1 = d1.format(now); DateFormat d2 = DateFormat.getDateTimeInstance(); String str2 = d2.format(now); DateFormat d3 = DateFormat.getTimeInstance(); String str3 = d3.format(now); DateFormat d4 = DateFormat.getInstance(); //使用SHORT风格显示日期和时间 String str4 = d4.format(now); DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,时间(精确到秒) String str5 = d5.format(now); DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期。时间(精确到秒) String str6 = d6.format(now); DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,时间(精确到分) String str7 = d7.format(now); DateFormat d8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM);

wincc系统日期时间获取

wincc系统日期时间获取 系统时间的获得,有两种办法,一是建立TAG,二是使用函数获取系统时间 方法一: 在[Tag Management]添加新的驱动"System Info.chn",然后在新添加的[SYSTEM INFO]新建连接,这样就可以创建实际TAG了; 下面新建几个TAG: 名字:date, 数据类型:text tag 8-bit character set,地址设定为Function:date,format:"MM-DD-YYYY" 名字:time, 数据类型:text tag 8-bit character set,地址设定为Function:Time,format:"HH:MM:SS" 根据上面的方法依次建立year,mon,day,week等TAG,请分别设置对应的format内容 TAG建立完成了,就可以读到系统时间了。新建一个图形文件,分别放置几个静态文本框[static text],把TEXT属性连接到上面新建的TAG,就可以显示系统日期时间,利用WEEK还能显示今天是星期几了. 方法二: 使用 C脚本获得系统时间 #include "apdefap.h" char* _main(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName) { time_t timer;

struct tm *ptm; char *p; time(&timer); ptm=localtime(&timer); p=SysMalloc(9); sprintf(p,"%04d:%02d:%02d",ptm->tm_year+1900,ptm->tm_mon+1,p tm->tm_mday); return(p); } 其中 //系统时间已经获得 //年: ptm -> tm_year+1900 //月: ptm-> tm_mon+1 //日: ptm -> tm_mday //星期: ptm -> tm_wday *注意这个,tm_wday返回的是整数,必须经过转换才能用来表示星期几

Java课程设计飞机航班管理系统

一.引言 1.1项目的名称 飞机航班信息管理系统 1.2项目背景和目标 飞机航班信息管理系统主要能够查询飞机的航班情况,飞行线路,票价,折扣 等等情况,并能够在数据库中更新维护飞机航班的信息,对飞机航班数据库进 行管理,如航班的增加,删除和修改等。我们的目标就是为该系统提供后台连 接数据库程序设计以及前台用户界面设计。 1.3项目的可行性研究 设计此系统需要java面向对象编程基础,数据库应用知识以及功能分析。根据目前所开设的课程,学生已经具备这样的知识,有能力综合java编程知识和数据库应用知识做出一个这样的飞机航班信息管理系统。 二、需求分析 2.1系统概述 此系统提供给系统管理员和用户。系统管理员登陆后可以对飞机航班信息进行管理,如:添加飞机航班信息,删除飞机航班信息,修改飞机航班属性。用户登陆后能进行飞机航班信息查询,订票以及退订。 2.2系统运行环境 Java运行在eclipse软件上,数据库用mysql数据库 2.3功能需求描述 用户选择相关的服务项目可以查看相关航班基本信息,并且可以根据自己需求选择相应服务,系统的信息更新时,相关的信息经过相应处理后,会存入到飞机航班数据库中的航班信息记录表中;系统管理员根据航空公司实际情况可以更新航班信息,并通过修改信息处理后被保存到飞机航班表中。 三、系统设计 开发与设计的总体思想 飞机航班信息管理系统主要分为用户和系统管理员2类,因此也将该系统分为2个相应的大的功能模块。 用户可以通过服务项目选择查询相关航班情况,进行订票,退订等服务项目。系统会将数据库中相应信息反馈给顾客。 系统管理员负责管系统信息的及时更新,可以根据航空公司航班的具体的情况更新数据库。 系统模块结构图

java获取当前时间

有两种方法: 方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import java.text.*; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就默认汉语就可以了,时间日期的格式默认为MEDIUM风格,比如:2008-6-16 20:54:53 //以下显示的日期时间都是再Date类的基础上的来的,还可以利用Calendar类来实现见类TestDate2.java public class TestDate { public static void main(String[] args) { Date now = new Date(); Calendar cal = Calendar.getInstance(); DateFormat d1 = DateFormat.getDateInstance(); //默认语言(汉语)下的默认风格(MEDIUM风格,比如:2008-6-16 20:54:53) String str1 = d1.format(now); DateFormat d2 = DateFormat.getDateTimeInstance(); String str2 = d2.format(now); DateFormat d3 = DateFormat.getTimeInstance(); String str3 = d3.format(now); DateFormat d4 = DateFormat.getInstance(); //使用SHORT风格显示日期和时间 String str4 = d4.format(now); DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,时间(精确到秒) String str5 = d5.format(now); DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期。时间(精确到秒) String str6 = d6.format(now); DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,时间(精确到分) String str7 = d7.format(now);

labView中如何获取windows当前系统时间

labView中如何获取windows当前系统时间 《labview8.2入门到精通》的PPT,第4章里面有个练习是“写一个VI获取当前系统时间,并将其转换为字符串和浮点数”。完成效果如图。我要怎么来获取当前系统的时间呢? 程序如下,还是比较简单的,用到的函数都在编程---定时和编程---数值---转换里 问题: 我从一个仪器当中读取到了GPS时间,并想在LabVIEW中以较高的分辨率设定Windows系统时间。我注意到LabVIEW的时间函数选版中有获取时间/日期的VI,但没有设定时间的VI。如何才能在LabVIEW中实现时间设定?

解答: LabVIEW中没有现成的VI用于系统时间设定,但可以通过Windows SDK来实现。参考以下的步骤,通过调用库函数节点的方式,调用kernel32.dll中SetSystemTime函数,可以设定系统时间: 1. 在程序框图中放置一个调用库函数节点。双击此节点打开调用 库函数对话框。 2. 点击浏览按钮并选择kernel32.dll (一般放置于 "C:\WINDOWS\system32\kernel32.dll")。 3. 在函数名下拉列表中选择"SetSystemTime" 。 4. 在调用规范下拉列表中选择"stdcall (WINAPI)" 。 5. 在返回类型中选择“数值”以及“有符号8位整数”。 6. 点击添加参数并在类型中选择“匹配至类型”,接着在数据格式 中选择“句柄指针”。 7. 点击确定按钮,完成对调用库函数节点的配置。 8. 这个函数以一个包含八个双字节(16位整数)的结构体作为参 数。在LabVIEW中,需要创建一个包含八个双字节的簇来传 递这个参数。八个双字节分别为年、月、星期、日、小时、分 钟、秒以及毫秒。将此簇连接至调用库函数节点的参数1。 9. 输入相应的值,并运行程序以设定系统时间。

java获得当前服务器的操作系统

import java.util.Properties; public class Test{ public static void main (String args[]){ Properties props=System.getProperties(); //系统属性 System.out.println("Java的运行环境版本:"+props.getProperty("java.version")); System.out.println("Java的运行环境供应商:"+props.getProperty("java.vendor")); System.out.println("Java供应商的URL:"+props.getProperty("java.vendor.url")); System.out.println("Java的安装路径:"+props.getProperty("java.home")); System.out.println("Java的虚拟机规范版本:"+props.getProperty("java.vm.specification.version")); System.out.println("Java的虚拟机规范供应商:"+props.getProperty("java.vm.specification.vendor")); System.out.println("Java的虚拟机规范名称:"+props.getProperty("https://www.doczj.com/doc/6e8278648.html,")); System.out.println("Java的虚拟机实现版本:"+props.getProperty("java.vm.version")); System.out.println("Java的虚拟机实现供应商:"+props.getProperty("java.vm.vendor")); System.out.println("Java的虚拟机实现名称:"+props.getProperty("https://www.doczj.com/doc/6e8278648.html,")); System.out.println("Java运行时环境规范版本:"+props.getProperty("java.specification.version")); System.out.println("Java运行时环境规范供应商:"+props.getProperty("java.specification.vender")); System.out.println("Java运行时环境规范名称:"+props.getProperty("https://www.doczj.com/doc/6e8278648.html,"));

操作系统时间片轮转RR进程调度算法java版

实验二间片轮转RR 进程调度算法 1、实验目的通过这次实验,加深对进程概念的理解,进一步掌握进程状态 的转变、进程调度的策略及对系统性能的评价方法。 2、试验内容 问题描述:设计程序模拟进程的时间片轮转RR调度过程。假设有n 个进程分别在T1, ?,T n 时刻到达系统,它们需要的服务时间分别为 S1, ?,n S。分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。 3、程序要求: 1)进程个数n;每个进程的到达时间T1, ?,T n 和服务时间S1, ?,n S;输入时间片大小q。 2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间; 3)输出:要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:进程 B 开始运行”等等; 4)输出:要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。 4、需求分析 (1)输入的形式和输入值的范围 时间片真实进程数各进程的到达时间各进程的服务时间

(2)输出的形式模拟整个调度过程、周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。 (3)测试用例 由于自己自编写代码方面与他人有一定的差距,因此在做实验的过程中我在网上搜了很多相关的资料,了解实现该算法的原理及各部分实现的代码,同时参考了几个别人写好的源代码,然后自己在理解的基础上不断的根据要求修改写程序,不过其中碰见的很多的问题。我已经自己调了好多错误,在一遍遍的调试和修改中,发现自己的经验在快速增长,这个感觉真的很不错。然而,实验的运行结果还不是 很完美,每个进程在最后一个时间片的运行过程中,进程列表的更新总是修改错误。不过在在本次试验中学到了不少东西,一点点的在进 6、测试结果 输入时间片,进程数,进程到达时间,服务时间

Js获取当前日期时间及其它操作

Js获取当前日期时间及其它操作 (2009-06-12 09:54:28) 转载▼ 标签: 分类:JavaScript js 时间 日期 it var myDate = new Date(); myDate.getYear(); //获取当前年份(2位) myDate.getFullYear(); //获取完整的年份(4位,1970-????) myDate.getMonth(); //获取当前月份(0-11,0代表1月) myDate.getDate(); //获取当前日(1-31) myDate.getDay(); //获取当前星期X(0-6,0代表星期天) myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数) myDate.getHours(); //获取当前小时数(0-23) myDate.getMinutes(); //获取当前分钟数(0-59) myDate.getSeconds(); //获取当前秒数(0-59) myDate.getMilliseconds(); //获取当前毫秒数(0-999) myDate.toLocaleDateString(); //获取当前日期 var mytime=myDate.toLocaleTimeString(); //获取当前时间myDate.toLocaleString( ); //获取日期与时间 日期时间脚本库方法列表 Date.prototype.isLeapYear 判断闰年 Date.prototype.Format 日期格式化

Date.prototype.DateAdd 日期计算 Date.prototype.DateDiff 比较日期差 Date.prototype.toString 日期转字符串 Date.prototype.toArray 日期分割为数组 Date.prototype.DatePart 取日期的部分信息 Date.prototype.MaxDayOfDate 取日期所在月的最大天数 Date.prototype.WeekNumOfYear 判断日期所在年的第几周 StringToDate 字符串转日期型 IsValidDate 验证日期有效性 CheckDateTime 完整日期时间检查 daysBetween 日期天数差 js代码: //--------------------------------------------------- // 判断闰年 //--------------------------------------------------- Date.prototype.isLeapYear = function() { return (0==this.getYear()%4&&((this.getYear()%100!=0)||(this.getYear()%400==0))); } //--------------------------------------------------- // 日期格式化 // 格式YYYY/yyyy/YY/yy 表示年份 // MM/M 月份 // W/w 星期 // dd/DD/d/D 日期 // hh/HH/h/H 时间 // mm/m 分钟

Java实验三常用系统类的使用

实验三常用系统类的使用 一、实验目的 了解Java 常用的系统类,包括字符串类、输入输出流类、数学函数类、日期类、随机数类以及向量类(学习继承内容后做)等的基本使用方法。理解Java 系统类的构成。二、实验要求 1.掌握不同类型的输入输出流类,标准数据流、文件流、数据输入输出流、对象流等。 2.掌握数学函数类的使用方法。 3.掌握日期类的使用方法。 4.掌握向量类的使用方法。 使用数学函数类 Math 是一个最终类,含有基本数学运算函数,如指数运算、对数运算、求平方根、三角函数、随机数等,可以直接在程序中加Math.前缀调用。 1.创建使用Math 类的应用程序KY5_8.java,源程序如下。 import java.util.*; class KY5_8 { public static void main(String args[]) { Random r1=new Random(1234567890L); Random r2=new Random(1234567890L); boolean b=r1.nextBoolean(); // 随机数不为0 时取真值 int i1=r1.nextInt(100); // 产生大于等于0 小于100 的随机数 int i2=r2.nextInt(100); // 同上 double i3=r1.nextDouble(); // 产生大于等于0.0 小于1.0 的随机数 double i4=r2.nextDouble(); // 同上 double d1=Math.sin(Math.toRadians(30.0)); double d2=Math.log(Math.E); double d3=Math.pow(2.0, 3.0); int r=Math.round(33.6F); System.out.println("b 的随机数不为0 时"+b); System.out.println("i1 的随机数为"+i1); System.out.println("i2 的随机数为"+i2); System.out.println("d1 的随机数为"+i3); System.out.println("d2 的随机数为"+i4); System.out.println("30 弧度的正弦值:Math.sin(Math.toRadians(30.0))="+d1); System.out.println("E 的对数值:Math.log(Math.E)="+d2); System.out.println("2 的3 次方:Math.pow(2.0, 3.0)="+d3); System.out.println("33.6F 四舍五入:Math.round(33.6F)="+r); } }

Python获取当前时间

python获取当前时间 我有的时候写程序要用到当前时间,我就想用python去取当前的时间,虽然不是很难,但是老是忘记,用一次丢一次, 为了能够更好的记住,我今天特意写下python当前时间这篇文章,如果你觉的对你有用的话,可以收藏下。 取得时间相关的信息的话,要用到python time模块,python time模块里面有很多非常好用的功能,你可以去官方 文档了解下,要取的当前时间的话,要取得当前时间的时间戳,时间戳好像是1970年到现在时间相隔的时间。 你可以试下下面的方式来取得当前时间的时间戳: import time print time.time() 输出的结果是: 1279578704.672 该结果为时间戳(单位:秒) 如果希望得到毫秒将该值*1000,即:time.time()*1000 但是这样是一连串的数字不是我们想要的结果,我们可以利用time模块的格式化时间的方法来处理:time.localtime(time.time()) 用time.localtime()方法,作用是格式化时间戳为本地的时间。 输出的结果是: time.struct_time(tm_year=2010,tm_mon=7,tm_mday=19,tm_hour=22,tm_min=33,tm_sec=39, tm_wday=0,tm_yday=200,tm_isdst=0) 现在看起来更有希望格式成我们想要的时间了。 time.strftime('%Y-%m-%d',time.localtime(time.time())) 最后用time.strftime()方法,把刚才的一大串信息格式化成我们想要的东西,现在的结果是: 2010-07-19 time.strftime里面有很多参数,可以让你能够更随意的输出自己想要的东西: 下面是time.strftime的参数: strftime(format[,tuple])->string 将指定的struct_time(默认为当前时间),根据指定的格式化字符串输出 python中时间日期格式化符号: %y两位数的年份表示(00-99) %Y四位数的年份表示(000-9999) %m月份(01-12) %d月内中的一天(0-31) %H24小时制小时数(0-23)

C#获取当前系统时间

C#获取当前系统时间 2010-01-02 16:24 --DateTime 数字型 System.DateTimecurrentTime=new System.DateTime(); 取当前年月日时分秒 currentTime=System.DateTime.Now; 取当前年 int 年=currentTime.Year; 取当前月 int 月=currentTime.Month; 取当前日 int 日=currentTime.Day; 取当前时 int 时=currentTime.Hour; 取当前分 int 分=currentTime.Minute; 取当前秒 int 秒=currentTime.Second; 取当前毫秒 int毫秒=https://www.doczj.com/doc/6e8278648.html,lisecond; (变量可用中文) 取中文日期显示——年月日时分 string strY=currentTime.ToString("f"); //不显示秒 取中文日期显示_年月 string strYM=currentTime.ToString("y"); 取中文日期显示_月日 string strMD=currentTime.ToString("m"); 取当前年月日,格式为:2003-9-23 string strYMD=currentTime.ToString("d"); 取当前时分,格式为:14:24 string strT=currentTime.ToString("t"); DateTime.Now.ToString();//获取当前系统时间完整的日期和时间DateTime.Now.ToLongDateString();//只显示日期 xxxx年xx月xx日,一个是长日期 DateTime.Now.ToShortDateString();//只显示日期 xxxx-xx-xx 一个是短日期 //今天 DateTime.Now.Date.ToShortDateString(); //昨天的 DateTime.Now.AddDays(-1).ToShortDateString(); //明天的 DateTime.Now.AddDays(1).ToShortDateString(); //本周(注意这里的每一周是从周日始至周六止) DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString(); DateTime.Now.AddDays(Convert.ToDouble((6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString(); //上周,上周就是本周再减去7天 DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();

操作系统课程设计时间片轮转算法java实现

操作系统课程设计时间 片轮转算法j a v a实现 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

学校代码: 10128 课程设计 题目:处理机管理模拟系统的设计与 实现 学生姓名: 学院:信息工程学院 系别:软件工程系 专业:软件工程 班级: 指导教师:副教授 讲师 2013年1月8日

内蒙古工业大学课程设计任务书(四) 学院(系):信息学院软件工程系课程名称:操作系统课程设计指导教师(签名): 专业班级:学生姓名:学号:

摘要 操作系统是计算机系统的关键组成部分,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本任务。对于不同的系统和系统目标,通常采用不同的调度算法,如在批处理系统中,为照顾为数众多的短作业,采用短作业优先调度算法;在分时系统中,为保证系统具有合理的响应时间,采用时间片轮转法进行调度。采用算法时,则要考虑多方面因素,以便达到最佳效果。本次课程设计采用时间片轮转调度算法来实现模拟进程调度任务的执行过程。 用Java模拟进程调度过程,可以方便地将运行结果直观地表示出来。Java语言独有的多线程操作,可以实现许多其他语言不能实现的功能,极大地方便了程序开发人员对程序的开发。此外,利用JavaGUI编程,可以使系统提供的界面更加友好。实验中,应用文件I/O操作、线程、AWT、Swing、内部类、接口、异常处理等技术,开发此系统。 关键字:时间片轮转; Java编程; GUI图形用户界面;文件操作;

Abstract The operating system is a key component of the computer system, responsible for the management and configuration memory, decided to system resources supply and demand priority, control input and output equipment, operation and management of network file system, and other basic different systems and system target, computers usually use different scheduling algorithm, such as in a Batch Processing System, in order to take care of a lot of short operation, using Short Job First algorithm;In systems with time sharing, to ensure the system has reasonable response time, need time slice Round Robin algorithm for scheduling. The algorithm, we should consider various factors, in order to achieve the best Course Design uses time slice Round Robin algorithm to simulate the process scheduling task execution process. With Java simulation process scheduling process, which can be conveniently will run results intuitively said addition, the use of JavaGUI programming, can make the system to provide the interface more , application file I/O operation, threads, AWT, Swing, internal class, interface, abnormal processing technology, the development of this system. Keywords: time slice Round Robin; Java Programming; ; File Operation;

VC 获取当前时间

VC++中其实还是通过调用它自带的CTime类来完成的获取当前系统时间的,我们做一个小程序来了解这个过程吧!对话框里只有两个显示框和两个按钮,点下按钮显示当前时间。就这么一个小程序。 (1)建立应用程序外壳 创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。进入对话框界面以后,按下图所示布置显示框和功能按钮。 (2)设置参数 其中上面的显示文本框设为CString型,命名为m_show,ID号为IDC_show。下面的显示文本框设为CString型,命名为m_show1,ID号为IDC_show1。 (3)编译程序 start键程序: void CDate1Dlg::Onstart() { //count=0; SetTimer(1,1000,NULL); // TODO: Add your control notification handler code here

} stop键程序: void CDate1Dlg::Onstop() { KillTimer(1); // TODO: Add your control notification handler code here } (4)增加计时器控件 View -> ClassWizard -> MessageMaps -> CUse progressDlg,加入WM_TIMER函数,编辑程序: void CDate1Dlg::OnTimer(UINT nIDEvent) { if(nIDEvent==1) { // count++; UpdateData(1); CTime mtime=CTime::GetCurrentTime();//获取当前时间 char i; CString w; i=char (mtime.GetDayOfWeek()); //获取当前时间的天数是这个星期的第几天,这里要注意了,系统上默认的一个星期的第一天是星期日,最后一天是周六,大家千万不要搞错了。我也是试了才知道的。 switch(i)//将数字状换成字符就不会出现星期7这种情况了 { case 2:

Java日志系统框架的设计与实现

Java日志系统框架的设计与实现 在Java领域,存在大量的日志组件,open-open收录了21个日志组件。日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有着重要的作用,我们可以把Java日志系统看作是必不可少的跟踪调试工具。 1.简介 日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。这种服务通常以两种方式存在: 1.日志系统作为服务进程存在。Windows中的的事件日志服务就属于这种类型,该类型的日志系统通常通过消息队列机制将所需要记录的日志由日志发送端发送给日志服务。日志发送端和日志保存端通常不在同一进程当中,日志的发送是异步过程。这种日志服务通常用于管理员监控各种系统服务的状态。 2.日志系统作为系统调用存在。Java世界中的日志系统和Unix环境下诸多守护进程所使用的日志系统都属于这种类型。日志系统的代码作为系统调用被编译进日志发送端,日志系统的运行和业务代码的运行在同一进程空间。日志的发送多数属于同步过程。这种日志服务由于能够同步反映处系统运行状态,通常用于调试跟踪和崩溃恢复。 本文建立的日志系统基本属于第二种类型,但又有所不同。该日志系统将利用Java线程技术实现一个既能够反映统一线程空间中程序运行状态的同步日志发送过程,又能够提供快速的日志记录服务,还能够提供灵活的日志格式配置和过滤机制。 1.1系统调试的误区 在控制台环境上调试Java程序时,此时往控制台或者文本文件输出一段文字是查看程序运行状态最简单的做法,但这种方式并不能解决全部的问题。有时候,对于一个我们无法实时查看系统输出的系统或者一个确实需要保留我们输出信息的系统,良好的日志系统显得相当必要。因此,不能随意的输出各种不规范的调试信息,这些随意输出的信息是不可控的,难以清除,可能为后台监控、错误排除和错误恢复带来相当大的阻力。 1.2日志系统框架的基本功能 一个完备的日志系统框架通常应当包括如下基本特性: 所输出的日志拥有自己的分类:这样在调试时便于针对不同系统的不同模块进行查询,从而快速定位到发生日志事件的代码。

相关主题
文本预览
相关文档 最新文档