本文目录一览:
1、c语言的发布日期
2、c语言如何输出当前的日期和时间?
3、C语言中的时间
4、C语言转换日期的表示形式
5、C语言日期格式转换
c语言的发布日期
//方案—优点:仅使用C标准库;缺点:只能精确到秒级
#include <time.h>
#include <stdio.h>
int main(void) {
time_t t = time(0);
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y/%m/%d%X%A 本年第%j天 %z", localtime(&t));
puts(tmp);
return 0;
}
size_t strftime(char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
根据格式字符串生成字符串。
struct tm *localtime(const time_t *timer);
取得当地时间,localtime获取的结果由结构tm返回
返回的字符串可以依下列的格式而定:
%a
星期几的缩写。Eg: Tue%A
星期几的全名。Eg: Tuesday%b
月份名称的缩写。%B
月份名称的全名。%c
本地端日期时间较佳表示字符串。%d
用数字表示本月的第几天(范围为00至31)。%H
用24小时制数字表示小时数(范围为00至23)。%I
用12小时制数字表示小时数(范围为01至12)。%j
以数字表示当年度的第几天(范围为001至366)。%m
月份的数字(范围由1至12)。%M
分钟。%p
以"AM"或"PM"表示本地端时间。%S
秒数。%U
数字表示为本年度的第几周,第一个星期由第一个周日开始。%W
数字表示为本年度的第几周,第一个星期由第一个周一开始。%w
用数字表示本周的第几天(0为周日)。%x
不含时间的日期表示法。%X
不含日期的时间表示法。Eg: 15:26:30%y
二位数字表示年份(范围由00至99)。%Y
完整的年份数字表示,即四位数。Eg: 2008%Z
(%z) 时区或名称缩写。Eg: 中国标准时间%%
字符。
//方案二优点:能精确到毫秒级;缺点:使用了windowsAPI
#include <windows.h>
#include <stdio.h>
int main(void) {
SYSTEMTIME sys;
GetLocalTime(&sys);
printf("%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n", sys.wYear, sys.wMonth, sys.wDay, sys.wHour, sys.wMinute, sys.wSecond, sys.wMilliseconds, sys.wDayOfWeek);
return 0;
}
//方案三,优点:利用系统函数,还能修改系统时间
//此文件必须是c++文件
#include <stdlib.h>
#include <iostream>
using namespace std;
void main() {
system("time");
}
//方案四,将当前时间折算为秒级,再通过相应的时间换算即可
//此文件必须是c++文件
#include <time.h>
#include <iostream>
using namespace std;
int main() {
time_t now_time;
now_time = time(NULL);
cout << now_time;
return 0;
}
c语言如何输出当前的日期和时间?
#include <stdio.h>
#include <time.h>
int main() {
time_t t; // time_t是一种类型,定义time_t类型的t
time(&t); // 取得当前时间
printf("%s\n", ctime(&t)); // ctime(t)将日期转为字符串并打印
return 0;
}
C语言中的时间
以前实际上用过,很想对C语言中的时间函数了解多一点,趁着这个寒假,查了些资料,大概把我现在能用到的关于时间的操作在此记录下来。通过几个函数来熟悉C语言中对时间的操作。(注:以下程序均在VS2010上编译通过。)
① time()
函数。可以通过 time()
函数来获得日历时间。其原型为:
time_t time(time_t *timer);
一般参数为空,返回值类型 time_t
是一个长整型数,函数将返回现在的日历时间,即从一个时间点(所有不同版本的Visual C++都是从1970年1月1日0时0分0秒)到现在的经过的秒数。
#include <stdio.h>
#include <time.h>
void main() {
time_t lt;
lt = time(NULL);
printf("1970年1月1日0时0分0秒到现在经历了%ld秒\n", lt);
}
运行结果(结果与程序运行的时间有关,贴出我此时运行出的结果):
1970年1月1日0时0分0秒到现在经历了1326975564秒
请按任意键继续...
② clock()
函数。C语言中的计时函数。函数原型为:
clock_t clock(void);
clock()
函数返回从“开启这个程序进程”到“程序中调用 clock()
函数”时之间的CPU时钟计时单元数。返回值类型 clock_t
也是一个长整型数。在 time.h
头文件中定义了一个符号常量 CLOCKS_PER_SEC
,表示一秒钟会有多少个计时单元。所以通过简单的数学知识,可以知道在程序中用 clock() / CLOCKS_PER_SEC
来表示程序从开始到调用 clock()
函数时用了多少秒。
#include <stdio.h>
#include <time.h>
void main() {
clock_t lt;
for (int i = 0; i < 1000000000; i++);
lt = clock();
printf("循环执行1000000000个空操作需要%f秒\n", (double)lt / CLOCKS_PER_SEC);
}
运行结果(在不同的机器上运行的结果可能不一样,下面是在我自己的笔记本上运行的结果):
循环执行1000000000个空操作需要3.484000秒
请按任意键继续...
③ 使用C库函数来显示日期和时间。首先要介绍一下C语言中的一个日期的结构体类型,tm
类型。其在 time.h
中的定义如下:
#ifndef _TM_DEFINED
struct tm {
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;
};
#define _TM_DEFINED
#endif
然后可以介绍有关的函数了。time.h
提供了两种不同的函数将日历时间(一个长整型数)转换成我们平时看到的把年月日时分秒分开的时间格式:
struct tm *gmtime(const time_t *timer);
struct tm *localtime(const time_t *timer);
其中 gmtime()
函数是将日历时间转换为世界标准时间(即格林尼治时间),并返回一个 tm
结构体来保存这个时间,而 localtime()
函数是将日历时间转换为本地时间(在中国地区获得的本地时间会比世界标准时间晚8个小时)。
#include <stdio.h>
#include <time.h>
void main() {
struct tm *local;
time_t t;
t = time(NULL);
local = localtime(&t);
printf("现在北京时间是%d点\n", local->tm_hour);
local = gmtime(&t);
printf("世界标准时间是%d点\n", local->tm_hour);
}
运行结果(运行结果与运行的时间有关,我是在早上9点多钟运行这个程序的):
现在北京时间是9点
世界标准时间是1点
请按任意键继续...
这样子我们就可以完全才输出此刻的年月日时分秒了,当然需要逐个来输出。其实C库函数还提供了一个很有用的以固定的时间格式来输出年月日时分秒的函数。这两个函数原型如下:
char *asctime(const struct tm *timeptr);
char *ctime(const time_t *timer);
asctime()
函数是通过 tm
结构来生成具有固定格式的保存时间信息的字符串,而 ctime()
是通过日历时间来生成时间字符串。这样下面的例子程序就容易理解了:
#include <stdio.h>
#include <time.h>
void main() {
struct tm *local;
time_t t;
t = time(NULL);
local = localtime(&t);
printf(asctime(local));
local = gmtime(&t);
printf(asctime(local));
printf(ctime(&t));
}
运行结果(我是在早上9点多运行这个程序的):
Fri Jan 20 09:55:56 2012
Fri Jan 20 01:55:56 2012
Fri Jan 20 09:55:56 2012
请按任意键继续...
C语言还可以以我们规定的各种形式来规定输出时间的格式。要用到时可以查阅相关的资料,限于篇幅,就介绍到这里。
④ 这里介绍计算持续的时间长度的函数。之前已经介绍了使用 clock()
函数的例子,它可以精确到毫秒级。其实我们也可以使用 difftime()
函数,但它只精确到秒。该函数的定义如下:
double difftime(time_t time1, time_t time0);
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void main() {
time_t start, end;
start = time(NULL);
for (int i = 0; i < 1000000000; i++);
end = time(NULL);
printf("这个循环用了%f秒\n", difftime(end, start));
}
运行结果:
这个循环用了3.000000秒
请按任意键继续...
⑤ 最后介绍 mktime()
函数。原型如下:
time_t mktime(struct tm *timer);
可以使用函数将用 tm
结构表示的时间转换为日历时间。其返回值就是转换后的日历时间。这样我们就可以先制定一个分解时间,然后对这个时间进行操作。下面的例子用来计算2012年1月20日是星期几:
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
struct tm t;
time_t t_of_day;
t.tm_year = 2012 - 1900;
t.tm_mon = 0;
t.tm_mday = 20;
t.tm_hour = 0;
t.tm_min = 12;
t.tm_sec = 1;
t.tm_isdst = 1;
t_of_day = mktime(&t);
printf(ctime(&t_of_day));
return 0;
}
运行结果:
Fri Jan 20 00:12:01 2012
请按任意键继续...
C语言转换日期的表示形式
#include <stdio.h>
void main() {
char num[8]; // 定义一个字符数组num
int i; // 定义整型变量
printf("请输入正确的日期!格式为:xxxxxxxx\n");
for(i = 0; i <= 8; i++) // 循环语句,读入8个字符,依次放到数组num中,作为8个元素
num[i] = getchar();
for(i = 0; i < 4; i++) // 输出前四个字符(年份)
putchar(num[i]);
putchar('_');
for(; i < 6; i++) // 输出(月份)
putchar(num[i]);
putchar('_');
for(; i < 8; i++) // 输出(日)
putchar(num[i]);
putchar('\n'); // 回车
}
C语言日期格式转换
1、C里没有相应的库,只能用 asctime
函数转换成一种固定格式。如果要转换,可以用 sprintf
把各种数据以 "1980-01-02 02:03:55"
这种标准格式,格式到一个字符串中。
2、asctime
函数:
- 原型:
char * asctime (const struct tm * timeptr);
- 功能:把
timeptr
指向的tm
结构体中储存的时间转换为字符串; - 头文件:
time.h
; - 返回值:一个固定格式的字符串。字符串格式为:
www mmm dd hh:mm:ss yyyy
。其中www
为星期,mmm
为月份,dd
为日,hh
为时,mm
为分,ss
为秒,yyyy
为年份。 3、例程:
#include <time.h>
#include <stdio.h>
int main() {
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = localtime(&rawtime); // 使用localtime函数把秒数时间rawtime转换为本地时间以tm结构体保存,并把tm结构体地址储存到timeinfo当中
printf("当前日期为: %s", asctime(timeinfo)); // 使用asctime函数把tm结构体中储存的时间转换为字符串,并输出
return 0;
}