python运维__fifth_chapter(1)--time module 翻译

本文介绍了Python中time模块的各种功能,包括时间格式转换、时间戳处理、日期解析等,并详细解释了与时间相关的术语如纪元、UTC等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个模块提供了不同的与时间相关的函数。在datetime和calender组件中也可以看到相关的函数。
This module provides various time-related functions. For related functionality, see also the datetime and calendar modules.

尽管这个组件总是有效的,不过它里面函数在不同的平台中有有些可能无效。这个组件中的大部分是直接调用C语言的库。时不时地看一下平台的文档对你来说会比较有帮助,因为这些函数的语义在各平台之间会有所不同。
Although this module is always available, not all functions are available on all platforms. Most of the functions defined in this module call platform C library functions with the same name. It may sometimes be helpful to consult the platform documentation, because the semantics of these functions varies among platforms.

下列列表解释了一些术语和时间格式间的转换。
An explanation of some terminology and conventions is in order.

  1. ‘纪元’(epoch)意味时间开始的点,它决定与平台。对于Unix来说,‘纪元’为January 1, 1970, 00:00:00 (UTC)。使用time.gmtime(0)就可以看到当前操作平台的‘纪元’了。
    The epoch is the point where the time starts, and is platform dependent. For Unix, the epoch is January 1, 1970, 00:00:00 (UTC). To find out what the epoch is on a given platform, look at time.gmtime(0).
  2. 术语seconds是从epocch开始走过的秒数的总和,不包括leap seconds。Leap seconds不包含在所有POSIX-compliant平台上。
    The term seconds since the epoch refers to the total number of elapsed seconds since the epoch, typically excluding leap seconds. Leap seconds are excluded from this total on all POSIX-compliant platforms.
  3. time组件中的函数不能处理epoch之前和某一特定时间点之后的日期和时间。这个特定时间点决定于C文件库;对于32为系统来说它为2038年。
    The functions in this module may not handle dates and times before the epoch or far in the future. The cut-off point in the future is determined by the C library; for 32-bit systems, it is typically in 2038.
  4. Year 2000(Y2K)问题:在所有日期与时间都在内部呈现为从epoch到当前的秒数,基于c语言库的python一般不会有year 2000问题。在给出%y格式的代码时函数strptime()可以解析2位数字的年份。当2位数字的年份被解析时time模块会根据POSIX和ISO的c语言标准进行转换:69-99的值被映射为1969-1999,0-68的值被映射为2000-2068.
    Year 2000 (Y2K) issues: Python depends on the platform’s C library, which generally doesn’t have year 2000 issues, since all dates and times are represented internally as seconds since the epoch. Function strptime() can parse 2-digit years when given %y format code. When 2-digit years are parsed, they are converted according to the POSIX and ISO C standards: values 69–99 are mapped to 1969–1999, and values 0–68 are mapped to 2000–2068.
  5. UTC为世界标准时(就像格林威治时间,或GMT)。UTC缩写不是拼写错误而是在英语和法语之间的折中方案。
    UTC is Coordinated Universal Time (formerly known as Greenwich Mean Time, or GMT). The acronym UTC is not a mistake but a compromise between English and French.
  6. DST为夏令时,在每年的一段时间内把时区调整一小时。DST没什么规律(由当地法律决定)而且每年都会变更。
    DST is Daylight Saving Time, an adjustment of the timezone by (usually) one hour during part of the year. DST rules are magic (determined by local law) and can change from year to year. The C library has a table containing the local rules (often it is read from a system file for flexibility) and is the only source of True Wisdom in this respect.
  7. 不同的时间相关函数的精度也许会比表达出来的值或参数来的低。例如在Unix系统中,秒的精度为50或100.
    The precision of the various real-time functions may be less than suggested by the units in which their value or argument is expressed. E.g. on most Unix systems, the clock “ticks” only 50 or 100 times a second.
  8. 在另一方面函数time()和sleep()的精度要由于它们的Unix系统:对于一个为浮点数的时间戳,函数time()剋返回有效而且精确的时间,sleep()则可以接受非零部分的时间。
    On the other hand, the precision of time() and sleep() is better than their Unix equivalents: times are expressed as floating point numbers, time() returns the most accurate time available (using Unix gettimeofday() where available), and sleep() will accept a time with a nonzero fraction (Unix select() is used to implement this, where available).
  9. gmtime(),localtime()和strptime()返回的值和传入asctime(),mktime()和strftime()中的值,都是9个整数组成的序列。gmtime(),localtime()和strptime()返回的值都表明它们空间的属性名。
    The time value as returned by gmtime(), localtime(), and strptime(), and accepted by asctime(), mktime() and strftime(), is a sequence of 9 integers. The return values of gmtime(), localtime(), and strptime() also offer attribute names for individual fields.
  10. 使用下面的函数可以在不同的时间表示方式中进行转换。
FromToUse
时间戳世界标准时间中的struct_timegmtime()
时间戳当地时间中的struct_timelocaltime()
世界标准时间中的struct_time时间戳calendar.timegm()
当地时间中的struct_time时间戳mktime()

time组件定义了下列函数与日期元素:


time.altzone

本地夏令时与UTC的差值,若在东时区该值就为负。

time.asctime([t])

把gmtime()或localtime()返回的元组时间表示方式或struct_time时间表示方式转化为这样的字符串:’Sun Jun 20 23:21:05 1993’。若参数t没有给,localtime()函数返回的当前时间就会被使用。asctime()无法获得本地时间信息。

time.clock()

在widows系统中,这个函数返回第一次调用这个函数流逝的时间,返回值为浮点数,该函数是基于Win32的QueryPerformanceCounter()。返回结果的精度达到一微秒。

time.clock_getres(clk_id)

返回指定的计时器clk_id的精度。只在Unix有效

time.clock_gettime(clk_id)

返回指定的计时器clk_id的时间。只在Unix有效

time.clock_settime(clk_id, time)

设定指定的计时器clk_id的时间。只在Unix有效

time.CLOCK_MONOTONIC

一些没有指定开始点的Clock无法设置和呈现monotonic time。只在Unxi有效

time.CLOCK_MONOTONIC_RAW
Similar to CLOCK_MONOTONIC, but provides access to a raw hardware-based time that is not subject to NTP adjustments.

Availability: Linux 2.6.28 or later.

New in version 3.3.

time.CLOCK_PROCESS_CPUTIME_ID
High-resolution per-process timer from the CPU.

Availability: Unix.

New in version 3.3.

time.CLOCK_REALTIME
System-wide real-time clock. Setting this clock requires appropriate privileges.

Availability: Unix.

New in version 3.3.

time.CLOCK_THREAD_CPUTIME_ID
Thread-specific CPU-time clock.

Availability: Unix.

New in version 3.3.

time.ctime([secs])

把epoch到当前的时间戳转化为字符串表示的local time。若没给出参数secs或参数为None,time()就会把当前时间返回。ctime(secs)相当于asctime(localtime(secs))。

time.daylight

若有定义夏令时这个属性就不为零。

time.get_clock_info(name)

获取被指定的作为命名空间对象的时钟信息。提供给该函数时钟名就会返回对应函数的值。

'clock': time.clock()
'monotonic': time.monotonic()
'perf_counter': time.perf_counter()
'process_time': time.process_time()
'time': time.time()

返回结果为下列属性:

  • adjustable:若时钟被系统管理员修改就为True
  • implementation:在C函数下对应的函数的名字
  • monotonic:若时钟不能回退就为True
  • resolution:精度

time.gmtime([secs])

把时间戳转化为时间标准时下的struct_time。若没有给参数,就会返回当前的时间。秒的额部分会被忽略。calendar。timegm()是它的反向操作。

time.localtime([secs])

与gmtime()相似,不过时区是为当地时区。当DST应用到给出的时间dst标志就会设置为1.

time.mktime(t)

这是localtime()的反向操作。它的参数为struct_time或者表示当地时间的9元素元组(需要设置dst标识;若不知道的话就用-1)。该函数会返回可兼容time()函数的浮点数。若输入的值不能有效的表示时间,那么就会报错(它取决于Python或者底层的C语言库是否能获取该值)。该函数能生成的最早时间由平台决定。

time.monotonic()

返回monotonic clock的值,这个值不会回退。它不会被系统时钟更新所影响。返回值的参考点没有定义,所以只有在连续调用该函数时之间的差值才算是有用的。

time.perf_counter()

返回执行计数器的时间,包括睡眠时间。返回值的参考点没有定义,所以只有在连续调用该函数时之间的差值才算是有用的。

time.sleep(secs)

暂停程序运行市建委传入秒数。参数可以为浮点数来显示一个精确的暂停时间。暂停的时间不一定很准确。

time.strftime(format[, t])

把用元组表现时间的形式转变为指定格式表达时间。若没有给出参数t就会返回DST时间。参数format一定要为字符。

0在tuple-time中的所有位置都是合法的;若它为不合规的就会被强制转化为1.

下面的指令可以嵌套在format字符串中。它们可以用来显示时间的广度和精度。

DirectiveMeaning
%a当地星期缩写
%A当地星期全称
%b当地月份缩写
%B当地月份全称
%c当地日期与时间
%d数字表达月份中的天
%H数字表达24小时
%I数字表达12小时
%j数字表达年份中的天
%m数字表达第几月
%M数字表达第几分
%p当前是AM还是PM
%S数字表达第几秒
%U表达年份中的第几个星期,每年的第一个星期天为week0
%w数字表达周几
%W表达年份中的第几个星期,每年的第一个星期一为week0
%x当前日期
%X当前时间
%y2位数年份
%Y4位数年份
%z时区的补偿值
%Z时区名
%%%

time.strptime(string[, format])

解析格式化表达方式的时间内容。返回值的格式为用gmtime()或localtime()返回的struct_time。

format参数与用在srtftime()中的指令是一样的;它默认为使用ctime()所返回的时间格式。若字符串根据format进行解析,就会保存。当有些精确值无法提供时,默认用来填充缺失值的值为(1900, 1, 1, 0, 0, 0, 0, 1, -1)。参数string和format都要为字符串。
例:

>>> import time
>>> time.strptime("30 Nov 00", "%d %b %y")   
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
                 tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

class time.struct_time

由gmtime(),localtime()和strptime()返回的时间序列类型。它是一个带有named tuple交互的对象:你可以通过索引或者属性名来获取值。
这里写图片描述

time.time()

返回从epoch开始的时间戳

time.timezone

返回由秒来表示的时区(非夏令时)补偿值

time.tzname

返回一个元组,包含当地非夏令时时区名和夏令时时区名。

time.tzset()

重置时区

<think>好的,用户的问题是关于如何对使用SUBSTRING函数截取最后两位字符的FIFTH_CODE列创建索引。首先,我需要回忆一下数据库索引的基本知识。索引通常是为了加速查询,但如果是基于函数的列,可能需要使用函数索引或者生成列。 用户提到的是SUBSTRING函数截取最后两位字符,这可能在查询中频繁使用,比如WHERE子句中使用SUBSTRING(FIFTH_CODE, -2)来过滤数据。普通的索引在这种情况下可能不会被使用,因为索引是针对列原始值的,而不是函数处理后的结果。 接下来,我需要考虑不同数据库系统的实现方式。比如在MySQL中,可以通过生成列来创建函数索引。用户需要先添加一个虚拟列,存储截取后的值,然后对这个虚拟列创建索引。步骤大致是:添加虚拟列,然后创建索引。类似地,在PostgreSQL中,可以直接创建函数索引,不需要生成列,直接用CREATE INDEX语句指定表达式。 另外,SQL Server的情况稍有不同,可能需要使用计算列并创建索引。而Oracle也支持函数索引,可以直接在CREATE INDEX时使用SUBSTR函数。 还需要提醒用户注意事项,比如索引维护的开销、性能测试的重要性,以及确保函数逻辑正确。比如,SUBSTRING的起始位置是否正确,特别是负数索引在不同数据库中的处理方式可能不同,需要确认兼容性。 最后,确保回答结构清晰,分步骤说明,并覆盖不同数据库系统的情况,这样用户可以根据自己使用的数据库选择合适的方法。同时,引用相关的参考资料,比如用户提供的引用[1]和[2]可能涉及到字符串函数的使用,但需要检查是否相关。不过根据用户提供的引用内容,引用[1]和[2]是关于字符串函数如strpos和endsWith的,可能与SUBSTRING函数的使用有关联,但可能不需要直接引用。需要确保引用正确,如果有相关的内容可以标注,否则可能不需要强制引用。</think>对使用$SUBSTRING$函数截取$FIFTH\_CODE$列最后两位字符创建索引,可以采用以下两种方法: ### 方法一:生成列+普通索引(MySQL方案) 1. 添加虚拟生成列: ```sql ALTER TABLE 表名 ADD COLUMN fifth_code_suffix VARCHAR(2) GENERATED ALWAYS AS (SUBSTRING(FIFTH_CODE, -2)) VIRTUAL; ``` 2. 创建普通索引: ```sql CREATE INDEX idx_fifth_code_suffix ON 表名(fifth_code_suffix); ``` ### 方法二:函数式索引(PostgreSQL/Oracle方案) ```sql -- PostgreSQL CREATE INDEX idx_fifth_code_suffix ON 表名(SUBSTRING(FIFTH_CODE FROM LENGTH(FIFTH_CODE)-1 FOR 2)); -- Oracle CREATE INDEX idx_fifth_code_suffix ON 表名(SUBSTR(FIFTH_CODE, -2)); ``` ### 关键注意事项 1. **索引维护代价**:函数索引会增加写操作的时间复杂度,建议在查询频率显著高于更新频率的场景使用 2. **性能测试**:通过`EXPLAIN`分析查询计划验证索引是否生效 3. **兼容性验证**:不同数据库对负数索引的处理方式不同,如MySQL的`SUBSTRING(col, -2)`与PostgreSQL的`RIGHT(col, 2)`等效但语法不同 对于字符串函数的位置参数处理,需要注意不同数据库的起始索引定义差异[^1][^2]。例如MySQL的`SUBSTRING`支持负数索引表示从末尾计算,而其他数据库可能需要使用`LENGTH()`函数配合计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值