当前位置: 首页 > news >正文

【LinuxC】时间、时区,相关命令、函数

文章目录

  • 一、序
    • 1.1 时间和时区
      • 1.11 时间
      • 1.12 时区
    • 1.2 查看时间时区的命令
      • 1.21 Windows
      • 1.22 Linux
  • 二、C语言函数
    • 2.1 通用
      • 2.11 函数简介
      • 2.12 数据类型简介
    • 2.2 windows 和 Linux特有函数
    • 2.3 C语言示例

一、序

1.1 时间和时区

1.11 时间

时间是一种用来描述物体运动变化的量,它可以用光的运动路程与常数c的比值来定义。不同的物体或观察者可能感受到不同的时间流逝速度,这就是相对论中的时间膨胀效应…

时间中存在许多特殊的概念,其中一些是与日历、日期和时间测量相关的。以下是一些常见的特殊时间概念:

  1. 闰年(Leap Year):为了与地球的自转周期相匹配,每四年有一个闰年。闰年有366天,而不是普通年份的365天。2月份会多出一天,变成29天。

  2. 闰秒(Leap Second):为了保持协调世界时(UTC)与国际原子时(TAI)之间的同步,不定期地会插入闰秒。这意味着某一天会有额外的一秒,通常在UTC的最后一分钟插入。

  3. 夏令时(Daylight Saving Time):一些国家和地区在夏季将时钟向前调整一小时,通常在春季开始,秋季结束。这旨在节约能源,延长白天的活动时间。

  4. 格林尼治标准时间(Greenwich Mean Time,GMT):以英国伦敦的格林尼治皇家天文台为基准的时间标准。UTC现在通常被视为国际时间标准,但GMT仍然用于某些上下文中。

  5. 纪元(Epoch):纪元是一个特定日期或时间点,通常用作计算机系统中时间的起点。例如,UNIX操作系统使用1970年1月1日午夜(格林尼治时间)作为纪元。

  6. 星期:星期是一周的周期性单位,通常有七天。星期中的每一天都有自己的名称(如星期一、星期二)和缩写(如周一、周二)。

  7. 季节:季节是一年中的四个时期,分别是春季、夏季、秋季和冬季。季节的开始和结束时间因地理位置而异。

  8. 日落和日出:日落是太阳在地平线以下消失的时间点,日出是太阳在地平线上升起的时间点。这些时间在不同季节和地点有所变化。

  9. 时间戳(Timestamp):时间戳是一个特定时间点的表示,通常以秒数或毫秒数等形式存在。时间戳在计算机系统中用于记录事件和操作的时间信息。

这些特殊的时间概念在日常生活、科学、计算机编程和全球协调等方面都有重要作用,它们帮助我们精确测量和记录时间,以满足各种需求和要求。


时间标准:

时间标准定义特点
TAI国际原子时,是一种使用约400个高精度原子钟的组合输出来测量的时间尺度提供了我们的时钟应该走的准确速度
UTC协调世界时,是一种用来确定世界各地本地时间的时间尺度。它由两个部分组成:TAI和UT1由于地球自转速度的变化,导致UTC和TAI之间会有差异。为了保持UTC和UT1之间的差异不超过0.9秒,会在UTC中加入或减去闰秒
UT1世界时,也称为天文时间,指的是地球的自转。它用来比较TAI提供的速度和地球上一天的实际长度受到地球自转速度变化、地震、潮汐等因素的影响
GMT格林威治标准时间,指的是位于伦敦郊区的皇家格林威治天文台的标准时间,因为本初子午线被定义在通过那里的经线UTC和GMT可以视为无差别,GMT是以原子时计时,更加精准,一般使用不需要精确到秒时,视为等同

1.12 时区

地球被分为24个时区,每个时区代表地球上一个特定的经度范围。时区的目的是在地球上的不同地方保持相对一致的时间,以便协调跨越多个地理区域的活动。

这很好理解,地球是球体,太阳无法同时照亮,各地太阳照射角度也不同

时区的概念起源于铁路和电报的发展。19世纪中期,铁路和电报使信息和人员快速传输变得可能,但不同城市使用不同的本地时间,这导致了混乱。因此,国际时间会议于1884年召开,决定将地球划分为24个时区,每个时区相差15度经度。

全球大部分地区都采用了这个时区系统,但还有一些例外,如印度和新尼泊尔时区,它们使用不同的偏移量。此外,一些国家也采用夏令时制度,以调整时钟以节省能源。

除了日常生活以外。当你购买一个国外其他时区的服务器,在上面部署某些服务时,就就有可能会遇到时区未正确设置而无法运行的情况;或者一种常见的情况是:电脑时间(时区)不正确时,浏览器和应用程序可能会无法联网。

在这里插入图片描述

时区24个,相邻时区时间差一个小时。但是很多国家国土会跨越多个时区(比如上海已经晚上了,而新疆太阳还没下山),为了避免混乱,国家会设置一个单一的时间标准。比如中国标准时间(China Standard Time,CST),也称为北京时间(Beijing Time,BT)。

如上图,东半球时间通常早于西半球。东半球和西半球之间的时间分界线是称为国际日期变更线(International Date Line,IDL)。国际日期变更线是一条虚拟的线,它沿着地球东西走向,大致沿着经度180度附近的线路。这个线上的一侧被认为是东半球,另一侧被认为是西半球。

1.2 查看时间时区的命令

1.21 Windows

图形界面不说了。

在这里插入图片描述

  • tzutil 是 Windows 系统中用于查看和设置时区的命令行工具:
    • tzutil /g:查看本地计算机当前的时区。
    • tzutil /l:查看所有有效的时区 ID 及其名称。
    • tzutil /s <timezoneid>:设置本地计算机的时区为指定的 ID。
  • datetime 是 Windows 系统中用于查看和修改日期和时间的命令行工具:
    • date:查看或修改本地计算机当前的日期。
    • time:查看或修改本地计算机当前的时间。
    • date /t:只查看本地计算机当前的日期,不进行修改。
    • time /t:只查看本地计算机当前的时间,不进行修改。

1.22 Linux

自己查看帮助手册,获取更多参数。

  1. 查看当前时间

    • 使用 date 命令来查看当前系统的时间。
    date
    
  2. 查看当前日期

    • 使用 date 命令并指定格式选项 -d 来查看当前系统的日期。
    date -d
    
  3. 查看当前时区

    • 使用 timedatectl 命令来查看当前的时区设置。
    timedatectl
    
  4. 查看可用的时区列表

    • 使用 timedatectl 命令来列出系统支持的所有时区。
    timedatectl list-timezones
    
  5. 更改时区

    • 使用 timedatectl 命令来更改系统的时区设置。例如,要将时区更改为“America/New_York”:
    sudo timedatectl set-timezone America/New_York
    
  6. 启用/禁用夏令时

    • 使用 timedatectl 命令来启用或禁用夏令时。例如:
    sudo timedatectl set-timezone America/New_York
    sudo timedatectl set-local-rtc 1
    
  7. 同步系统时间

    • 使用 ntpdate 命令来手动同步系统时间与网络时间服务器。例如:
    sudo ntpdate time.nist.gov
    


在 Linux 系统中,time 命令用于测量执行命令或程序所花费的时间。它可以帮助评估程序的性能以及执行时间。要使用 time 命令,请在终端中键入 time,然后紧跟要执行的命令。以下是示例:

time lscpu

上述命令将测量执行 lscpu 命令所需的时间,并显示三个关键时间信息:

  1. real:实际经过的时间,从命令开始到完成的总时间。
  2. user:CPU 用户模式时间,即命令在用户空间中花费的时间。
  3. sys:CPU 内核模式时间,即命令在内核空间中花费的时间。

例如,如果执行 time lscpu 命令,会看到如下输出:

...
real    0m0.028s
user    0m0.004s
sys     0m0.024s

这表示 ls 命令实际花费了0.028秒的时间,其中0.004秒在用户模式中使用CPU,0.024秒在内核模式中使用CPU。

time 命令对于评估命令或程序的性能非常有用,特别是在优化代码或比较不同实现的执行时间时。请注意,time 命令不是用来设置系统时间或时区的命令,而是用来测量命令执行时间的工具。



二、C语言函数

2.1 通用

2.11 函数简介

位于time.h中:

函数函数原型输入输出作用注意点
time()time_t time(time_t *time_ptr);time_ptr - 一个 time_t 指针time_t - 时间值返回自1970年1月1日以来的秒数用本地时间计算的
ctime()char *ctime(const time_t *time_ptr);time_ptr - 一个 time_t 指针char * - 时间字符串将时间值转换为可读的日期和时间字符串字符串可能以换行符结尾,需要适当处理
strftime()size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);str - 字符数组,maxsize - 最大字符数,format - 格式化字符串,timeptr - struct tm 结构size_t - 格式化后的字符数将时间值格式化为自定义字符串格式需要使用适当的格式字符串,结构体 tm 需要正确设置
gmtime()struct tm *gmtime(const time_t *time_ptr);time_ptr - 一个 time_t 指针struct tm * - 时间结构体将时间值转换为世界标准时间(UTC)的 struct tm 结构需要注意时区和夏令时的差异,返回的结构体表示UTC时间
localtime()struct tm *localtime(const time_t *time_ptr);time_ptr - 一个 time_t 指针struct tm * - 时间结构体将时间值转换为本地时间的 struct tm 结构时区和夏令时规则会影响结果,返回的结构体表示本地时间
difftime()double difftime(time_t time1, time_t time2);time1time2 - 两个 time_tdouble - 时间差(秒)计算两个时间值之间的时间差返回的是一个浮点数,可用于比较不同时间之间的时间差
mktime()time_t mktime(struct tm *timeptr);timeptr - struct tm 结构体time_t - 时间值struct tm 结构体表示的时间转换为 time_t 类型的时间值结构体字段需要正确设置,不支持负数年份
asctime()char *asctime(const struct tm *timeptr);timeptr - struct tm 结构体char * - 时间字符串struct tm 结构体表示的时间转换为可读的日期和时间字符串返回的字符串可能以换行符结尾,需要适当处理

2.12 数据类型简介

time_t定义:

typedef long time_t;

这个定义意味着 time_t 是一个长整型(long)数据类型。在许多系统中,time_t 被定义为从1970年1月1日至今的秒数,用于表示时间戳。在不同的系统和编译环境中,time_t 的具体类型可能会有所不同,但通常它被定义为整数类型。

对于不同的操作系统和编译器,time_t 的实现可能会有所不同,但它的目的是为了提供一个可移植的方式来表示时间。程序员在使用 time_t 时,应该遵循标准库中相关函数的文档和规范,以确保在不同平台上的兼容性。

1970年1月1日被选为UNIX时间起始点是因为这是UNIX操作系统的创建者之一、美国计算机科学家肯·汤普森(Ken Thompson)在当时的UNIX实现中选择的日期。

这个日期的选择实际上是一种约定,因为计算机科学家需要一种标准方式来表示时间。UNIX时间是一种以秒为单位的计时方式,从1970年1月1日0时0分0秒(UTC)开始,表示自那时以来的秒数。这个日期被选为UNIX时间的起点,主要是因为它相对容易计算,而且在当时的UNIX系统中也很方便。

此外,1970年1月1日0时0分0秒(UTC)也被选为UNIX时间起始点,因为它位于协调世界时(Coordinated Universal Time,UTC)中,并且在计算时间时避免了涉及夏令时(DST)等时区变化的复杂性。这使得UNIX时间在不同地区和不同计算机系统上都可以保持一致。

从1970年1月1日开始的UNIX时间在计算机科学和软件工程中广泛使用,尤其是在操作系统、数据库、文件系统和网络协议中。因此,这个日期成为了一个重要的时间基准,用于表示和计算时间间隔,以及在计算机系统之间进行时间戳的交换。


结构体原型:(这里 把2.2节的顺便写了)

稍微看一下注释,比如月份从0开始,年数以1900开始计算。(1890就写-10)

  1. struct tm 结构体(在 <time.h> 中定义):

    struct tm {int tm_sec;   // 秒(0-59)int tm_min;   // 分钟(0-59)int tm_hour;  // 小时(0-23)int tm_mday;  // 月中的天数(1-31)int tm_mon;   // 月(0-11,0 表示 1 月)int tm_year;  // 年份(自 1900 年起的年数)int tm_wday;  // 星期几(0-6,0 表示星期日)int tm_yday;  // 年中的天数(0-365)int tm_isdst; // 夏令时标志(正数表示 DST,0 表示不是 DST,负数表示不确定)
    };
    
  2. SYSTEMTIME 结构体(在 <windows.h> 中定义):

    typedef struct _SYSTEMTIME {WORD wYear;         // 年份WORD wMonth;        // 月份WORD wDayOfWeek;    // 星期几(0-6,0 表示星期日)WORD wDay;          // 月中的天数(1-31)WORD wHour;         // 小时(0-23)WORD wMinute;       // 分钟(0-59)WORD wSecond;       // 秒(0-59)WORD wMilliseconds; // 毫秒
    } SYSTEMTIME;
    
  3. struct timeval 结构体(在 <sys/time.h> 中定义,通常用于 Linux 和 Unix 系统):

    struct timeval {long tv_sec;  // 秒long tv_usec; // 微秒
    };
    
  4. struct timespec 结构体(在 <time.h> 中定义,通常用于 Linux 和 Unix 系统):

    struct timespec {time_t tv_sec; // 秒long   tv_nsec; // 纳秒
    };
    

这些结构体用于表示时间的各个方面,包括年、月、日、时、分、秒等,并且在与时间相关的C函数中经常用于输入和输出。请注意,SYSTEMTIME 结构体是Windows特有的,而 struct timevalstruct timespec 结构体通常用于Linux和Unix系统。👇

2.2 windows 和 Linux特有函数

在Windows下:

函数函数原型头文件输入输出作用注意点
GetSystemTime()void GetSystemTime(SYSTEMTIME *lpSystemTime);windows.hlpSystemTime - 一个 SYSTEMTIME 结构指针获取系统时间(UTC+),以年、月、日、时、分、秒等形式返回
GetLocalTime()void GetLocalTime(SYSTEMTIME *lpSystemTime);windows.hlpSystemTime - 一个 SYSTEMTIME 结构指针获取本地时间,考虑了时区和夏令时规则,以年、月、日、时、分、秒等形式返回
GetTickCount()DWORD GetTickCount(void);windows.h返回自系统启动以来的毫秒数

在Linux下:

函数函数原型头文件输入输出作用注意点
gettimeofday()int gettimeofday(struct timeval *tv, struct timezone *tz);sys/time.htv - 一个 struct timeval 结构指针,tz - 一个 struct timezone 结构指针(可传入NULL )0(成功)或-1(失败)获取当前时间,包括秒和微秒,可用于高精度计时需要检查返回值以处理错误struct timezone 在许多系统中被忽略
clock_gettime()int clock_gettime(clockid_t clk_id, struct timespec *tp);time.hclk_id - 时钟标识,tp - 一个 struct timespec 结构指针0(成功)或-1(失败)获取高分辨率的时间信息,可选择不同的时钟源需要检查返回值以处理错误,时钟标识和支持的时钟源因系统而异

2.3 C语言示例

简单示例吧,自己结合前面的结构体定义、函数原型和功能介绍。应用还是很广泛的。

需要注意一些换算,尤其是gm这个结构体,time_t 变量是从1970-1-1开始计算的,tm结构体变量的成员是从1900年开始的,月数、星期几、天数从0开始。

struct tm {int tm_sec;   // 秒(0-59)int tm_min;   // 分钟(0-59)int tm_hour;  // 小时(0-23)int tm_mday;  // 月中的天数(1-31)int tm_mon;   // 月(0-11,0 表示 1 月)int tm_year;  // 年份(自 1900 年起的年数)int tm_wday;  // 星期几(0-6,0 表示星期日)int tm_yday;  // 年中的天数(0-365)int tm_isdst; // 夏令时标志(正数表示 DST,0 表示不是 DST,负数表示不确定)
};

Linux下:

输出:

在这里插入图片描述
代码示例:

#include <stdio.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>int main() {struct timeval current_time;struct tm set_time ={ 0, 0, 0, 1, 0, 120, },*diff_readable;char time_str[30], *p;if (gettimeofday(&current_time, NULL) == 0) {p = ctime(&current_time.tv_sec);printf("Current time is %s", p); // 注意这里的字符串本来就是以换行符结尾的printf("It has passed %ld seconds %ld microseconds since 1970-1-1\n", current_time.tv_sec, current_time.tv_usec);} else {perror("gettimeofday");}time_t set_t = mktime(&set_time);printf("I set a time: %s", asctime(&set_time));double diff = difftime(current_time.tv_sec, set_t);printf("Time diff between current time and set time  is %ld seconds\n",(long)(diff));time_t diff_time = (time_t)diff;diff_readable = localtime(&diff_time);printf("Transform to be readable :%d yesrs %d months %d days %d hours\n",diff_readable->tm_year-70, diff_readable->tm_mon+1,diff_readable->tm_mday, diff_readable->tm_hour);return 0;
}


Windows下:

使用Windows API :
输出:

Current time:2023-10-6-14:47
Current time:2023-10-6-22:47
It has passed 249 hours since PC started

源码:

#include <stdio.h>
#include <string.h>
#include <windows.h>int main() {SYSTEMTIME system_time = {0}, local_time = {0};GetSystemTime(&system_time);printf("Current time:%u-%u-%u-%u:%u\n",system_time.wYear, system_time.wMonth, system_time.wDay,system_time.wHour, system_time.wMinute);GetLocalTime(&local_time);printf("Current time:%u-%u-%u-%u:%u\n", local_time.wYear, local_time.wMonth, local_time.wDay,local_time.wHour, local_time.wMinute);printf("It has passed %lu hours since PC started\n",GetTickCount()/(1000*60*60));return 0;
}

使用time.h:
输出:

Current time(local): Fri Oct  6 23:00:39 2023Current time(UTC): Fri Oct  6 15:00:39 2023

源码:

#include <stdio.h>
#include <string.h>
#include <time.h>int main() {char current_time[30] = {0}, *p;time_t time_second;struct tm* utc_time;time(&time_second);p = current_time;p = ctime(&time_second);printf("Current time(local): %s\n",p);utc_time = gmtime(&time_second);time_t UTC = mktime(utc_time);p = ctime(&UTC);printf("Current time(UTC): %s\n",p);return 0;
}

总结:

一般使用time.h的函数就能完成所有工作,不过在特定系统下使用对应的API获取时间会更快,更精确。

相关文章:

【LinuxC】时间、时区,相关命令、函数

文章目录 一、序1.1 时间和时区1.11 时间1.12 时区 1.2 查看时间时区的命令1.21 Windows1.22 Linux 二、C语言函数2.1 通用2.11 函数简介2.12 数据类型简介 2.2 windows 和 Linux特有函数2.3 C语言示例 一、序 1.1 时间和时区 1.11 时间 时间是一种用来描述物体运动变化的量…...

mac清理垃圾的软件有哪些?这三款我最推荐

没错&#xff0c;Mac电脑真的好用&#xff0c;但是清理系统垃圾可不是件容易的事。由于Mac系统的封闭性&#xff0c;系统的缓存垃圾常常隐藏得让人发现不了。不过&#xff0c;别担心&#xff01;有一些专业的Mac清理软件可以帮你解决这一系列问题&#xff0c;让清理垃圾变得轻松…...

复习Day11:链表part04: 206. 反转链表、92. 反转链表II、25. K 个一组翻转链表、148. 排序链表

我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用CLion了&#xff0c;使用leetcode自带的IDE模拟面试环境。 哈希表章节的题目思路很清晰&…...

一年一度的国庆节又结束了

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

雷达干扰和烧穿范围简介

一、干扰信号比 J/S或J-to-S是从目标发射的干扰信号接收的功率(J)与从目标的雷达反向散射接收的功率的比率。 二、烧穿范围 通过电子攻击(J)可以首先检测到目标回波信号(S)的雷达到目标的距离。 三、自保护干扰 也称为主瓣干扰(雷达回波源和干扰机并置)。 烧穿范围…...

“秋天第一只大闸蟹”背后,看见京东一体化供应链

京东似乎正在从一个大闸蟹的物流服务商、销售商&#xff0c;转变为一个大闸蟹的“供货商”。 作者|斗斗 编辑|皮爷 出品|产业家 阳澄湖连续几天的降雨&#xff0c;使得通往蟹塘的路异常难走。 长期驻扎此地的京东相关负责人蹲在蟹塘边的小路上&#xff0c;指着蟹塘说道…...

大模型Java编码能力评估

大模型如火如荼发展&#xff0c;不能只看热闹&#xff0c;也需要躬身入局。要想评估大模型的能力&#xff0c;必须有一个评估方法和评估数据集。下面就梳理下当前大模型是如何评估代码能力的 权威评估 opencompass: https://opencompass.org.cn/datalearner: https://www.dat…...

javascript选择框和选择文本的创建与增加以及设置选中项

<script type"text/javascript">//得到选中项的索引&#xff0c;文本和值函数function getselected(selectedIndex){var selectboxdocument.forms[0].elements["location"];var indexselectbox[selectedIndex];var selectedOptionselectbox.options[…...

汽车驾驶任务的隐马尔可夫模型识别方法研究

汽车驾驶任务的隐马尔可夫模型识别方法研究 一、Introduction 自动驾驶汽车经过了几十年的发展&#xff0c;是目前国内外汽车行业中的重要研究方向。自 动驾驶汽车的智能化需要车辆能够有类“人”的行为&#xff0c;在决策策略上可以满足人的心理 需求。人在驾驶过程中&#…...

Java编程题(完数)

题目 一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和&#xff0c;这个数就称为完数。例如61&#xff0b;2&#xff0b;3(6的因子是1,2,3)。 现在&#xff0c;你要写一个程序&#xff0c;读入两个正整数n和m&#xff08;1<n<m<…...

国庆day6

国庆day6 汇编语言的组成 伪操作 不参与程序的执行&#xff0c;但是用于告诉编译器程序该怎么编译 如&#xff1a; .text .global .end .if .else .endif .data汇编指令 汇编器将一条汇编指令编译成一条机器码&#xff0c;在内存里一…...

力扣 -- 873. 最长的斐波那契子序列的长度

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…...

【程序员必看】计算机网络,快速了解网络层次、常用协议和物理设备!

文章目录 0 引言1 基础知识的定义1.1 计算机网络层次1.2 网络供应商 ISP1.3 猫、路由器、交换机1.4 IP协议1.5 TCP、UDP协议1.6 HTTP、HTTPS、FTP协议1.7 Web、Web浏览器、Web服务器1.8 以太网和WLAN1.9 Socket &#xff08;网络套接字&#xff09; 2 总结 0 引言 在学习的过程…...

1.软件测试基础

一、软件测试概念 1.什么是软件 软件是计算机程序&#xff0c;是由计算机代码编写的一系列指令和数据&#xff0c;可以实现各种功能。它指的是计算机系统中的应用程序&#xff0c;包括操作系统、应用软件、驱动程序等。软件可以通过编程语言编写和开发&#xff0c;并可以安装…...

综合布线系统概述

对于现代化的大楼&#xff0c;其内部信息传输通道系统&#xff08;综合布线系统&#xff09; 已不仅仅要求能支持一般的语音传输&#xff0c;还应能够支持多种计算机网络 协议及多种厂商设备的信息互连&#xff0c;可适应各种灵活的&#xff0c;容错的组网方 案&#xff0c;…...

Labview 实战 99乘法表

基于新手小白&#xff0c;使用Labview实现99乘法表&#xff0c;敢于发表自己的一点方法&#xff0c;还请各位大侠放过&#xff01; 如下&#xff1a; 运行效果如下&#xff1a; 思路为&#xff1a;将要显示出来的数据&#xff0c;全部转换为字符串形式&#xff0c;再塞入到数组…...

需求变化频繁的情况下,如何实施自动化测试

一.通常来说&#xff0c;具备以下3个主要条件才能开展自动化测试工作: 1.需求变动不频繁 自动化测试脚本变化的频率决定了自动化测试的维护成本。如果需求变动过于频繁&#xff0c;那么测试人员就需要根据变动的需求来不断地更新自动化测试用例&#xff0c;从而适应新的功能。…...

C++设计模式-桥接(Bridge)

目录 C设计模式-桥接&#xff08;Bridge&#xff09; 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-桥接&#xff08;Bridge&#xff09; 一、意图 将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。 二、适用性 你不希望在抽象和它…...

Springboot+vue的开放性实验室管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的开放性实验室管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 本文设计了一个基于Springbootvue的前后端分离的开放性实验室管理系统&#xff0c;采用M&#xff08…...

1.9.C++项目:仿muduo库实现并发服务器之Connection模块的设计

项目完整在&#xff1a; 文章目录 一、Connection模块&#xff1a;这是一个对于通信连接进行整体管理的一个模块&#xff0c;对一个连接的操作都是通过这个模块来进行&#xff01;二、提供的功能三、实现思想&#xff08;一&#xff09;功能&#xff08;二&#xff09;意义&am…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...