`

第九章 时间处理

阅读更多

第九章  时间处理

译自 《TangoRefMan_Sep_1_2008.odt


注意:0.99.3版后,时间系统已经改变,如果使用0.99.3或更早的Tango库,请看原始文档。
时间单位对于人类的重要性正如位和字节对于计算机的重要性。我们居家、旅行、日常生活都要用到时间。出于这个原因,tango.time包收集所有的时间细节和日期详情到一个合适的模块中,谨慎地抽象去掉所有平台的细节。


TimeSpan(时间跨度)


时间跨度的基本描述在tango库的tango.time.TimeSpan模块中。这个概念描述的时间长度有能力描述一个+/-10000年的周期,以100纳秒递增(叫做ticks)。时间跨度TimeSpan概念被看作一个基本类型,它提供所有实用的操作重载,可以方便地转换TimeSpan到通用的计量单位如秒和毫秒。
TimeSpan模块包含大多数时间长度的构造器,构造器以计量单位命名。如创建一个描述5秒的时间跨度:


TimeSpan t =TimeSpan.seconds(5);


TimeSpan模块也包含为数众多的常量帮助操作描述ticks的值,你将会常常用到这些常量,将来的tango版本会有一个不同的重新解决方法给tick,这些常量被命名为TimeSpan.TicksPerⅩ,这里的Ⅹ是秒、毫秒等等。


如创建一个描述5秒的时间跨度:


TimeSpan t = TimeSpan(TimeSpan.TicksPerSecond*5);

 


转换TimeSpan 到一个确凿的时间单位,使用时间单位命名的属性


//获取TimeSpan t描述的秒数
long s = t.seconds;


注意,这样将执行整数分割,将截短任何不完整的秒数。


Time和TimeOfDay


基本的时刻表示在tango.time.Time模块中,这个结构允许表示的时刻范围从10000BC(公元前)到10000AD(公元)。Time中的分隔时间单位也是100纳秒。Time使用TimeSpan去返回两个时间值的不同点,与及加减一个时间长度,它也被clock类和calendar类使用去提供本地时间刻度。
TimeOfDay结构在tango.time.TimeSpan中,用于表示一个给定日子没有日期的时间如:12:42:32.这个结构与TimeSpan有点像,不同的是它的属性返回一个时间部分,而不是转换总时间成时间单位,但TimeOfDay.seconds通常返回一个0-59之间的值。TimeOfDay可以从一个给定时间用时间属性去访问:


import tango.io.Stdout;
import tango.time.WallClock;
void nain()
{
TimeOfDay  tod =WallClock.now.time;
Stdout.format(“time is {}:{:d02}:{:d02}”,
tod.hours,tod.minutes,tod.seconds).newline;
}


Clock、WallClock和DateTime


tango.time.Clock和WallClock模块分别表示UTC和本地时间。Clock和WallClock有类似的函数。


Clock有如下三个意图:
1.抽象分离系统级时间函数。
2.揭示一个简单、灵活、一致的时间表达式,表示UTC时间和本地时间。
3.初始化用户易使用的时间域,带有原生时间信息,因此每个时间部分容易独立访问。


取回一个时钟Clock的当前值可以通过now方法,返回一个Time值,此值可以分割成表示时间部分的域,或使用TimeSpan结构操作。
示例:


import tango.time.Clock;
void main ( )
{
Time time = Clock.now;
}


使用Clocks更多地围绕访问时间“域”(fields)去获取或设置时间属性。初始化时间域我们使用Clock.toDate或WallClock.toDate去创建一个DateTime结构获取UTC或本地时间。


import tango.time.Clock;
void main ( )
{
auto fields = Clock.toDate;
}


这里,我们用当前UTC时间设置datetime域。也可以类似地调用WallClock.toDate代替,在这种情况下,所有域值被本地时间代替。有时转换当前域时间值到一个原子形式(一个简单的Time值。)是必要的。fromDate是用于这种目的的方法,它返回它返回当前域内容的时间值。
现在,哉变量被初始化为时间值,我们可以很好的使用它们:


import tango.time.Stdout;
import tango.time.WallClock;
void main ( )
{
auto fields = WallClock.toDate;
Stdout.format(”{}{}{},{}{:D2}{:D2}{:D2}”,
fields.date.asDay,
fields.date.asMonth,
fields.date.day,
fields.date.year,
fields.time.hours,
Fields.minutes,
fields..time.seconds);
}


这些域提供给我们方便地访问当前时间的所有方面。属性.asDay返回一个表示当前星期几的名字,asMonth返回表示月份名的字符串day、year、hours、minutes、seconds分别返回表示该部分的整数值。引用milis域时将获得尽可能准确的当前时间的毫秒值。


WallClock也允许我们用zone方法取得时区信息。调用此方法取得表示格林尼治(Green wich Mean Time)时间的当前时区的TimeSpan值,负值表示west of GMT。


StopWatch


StopWatch模块展示一个简单的start/stop API,在win32平台有非常高的精确度。


Calendar (日历)


时间值是日历未知,所有日历基于传统的秒和小时的概念,和日常使用的时间概念相同。不过,在年、月和一个月中的日期部分就有了一些出入。一个日历变体提供转换日期和时间部分到一个时间值的可能性,或给予访问者一Time结构的日期部分。例如:


import tango.time.Stdout;
import tango.time.WallClock;
import tango.time.chrono.Gregorian;
void main ( )
{
auto n = WallClock.now;
auto t = n.time;
auto d = Gregorian.generic.toDate(n);
Stdout.format(“date/time is {}/{}/{} {} : {:d2}: {:d2} “,
d.day,d.month,d.year,t.hour,t.minutes,t.seconds).newline;
}


构造一个时间结构从一个给定的日期和时间用getTime方法:


Time arbitraryTime = cal.getTime(2006,11,18,10,52,33,0);


为了方便,有一个模块在tango.time.chrono称为DefaultCalendar,此模块包含一个简单日历实例叫做DefaultCalendar。默认是Gregorian日历,但你可以改变它到你想改变的任何日历。


Daylight Savings time 夏令时间(DST)


所有时区和夏令时间计算隔离在WallClock中,在UTC和Wall-time间互相转换,按照适当的操作系统便利被执行。

分享到:
评论

相关推荐

    第九章 GPS测量数据处理PPT课件.ppt

    第九章GPS测量数据处理主要涉及GPS测量技术的基础知识及其在实际应用中的处理流程。GPS接收机通过采集伪距、载波相位和卫星星历等数据,用于定位和导航。在数据处理阶段,通常会经历以下几个关键步骤: 1. **数据...

    ITE第九章考试答案.doc

    "ITE第九章考试答案.doc" 本资源是关于ITE第九章考试答案的文档,涵盖了打印机维护、打印机故障排除、打印机设置、打印机技术等方面的知识点。 一、打印机维护 * 定期用异丙醇清洁加热元件延长热敏打印机的寿命。...

    python数据分析第九章资料

    Python数据分析在现代科技领域扮演着至关重要的角色,...以上是Python数据分析第九章可能涵盖的主要知识点,通过学习这些内容,你可以提升数据处理和分析的能力,为后续的机器学习或其他数据驱动的决策提供坚实的基础。

    第五章信号处理基础习题答案__杨浩__科学出版社

    第五章信号处理基础习题答案中包含了一系列关于信号处理基础知识点的详细介绍。下面是根据【部分内容】整理出的关键知识点: 1. 序列的Z变换:Z变换是数字信号处理中的一个重要工具,它将离散时间信号转换为复频域...

    Matlab讲义之胡广书现代信号处理教程-第九章 小波变换基础.rar

    《Matlab讲义之胡广书现代信号处理教程——第九章 小波变换基础》是针对信号处理领域的一份重要教学资料,它深入浅出地介绍了小波变换的基础理论及其在MATLAB环境中的应用。小波变换是数字信号处理中的一个关键工具...

    第九章.pdf

    第九章的内容是关于数字信号处理(DSP)中的快速傅里叶变换(FFT)算法,它是对离散傅里叶变换(DFT)的改进算法。FFT算法是一种高效计算DFT及其逆变换的方法,能够将计算复杂度从O(N^2)降低到O(NlogN),从而大幅...

    《数字电路与逻辑设计》课后习题答案 第九章

    ### 数字电路与逻辑设计第九章知识点解析 #### 9-1 脉冲信号的参数及含义 脉冲信号是数字电路中的基础信号之一,它由一系列特定参数定义。这些参数对于理解脉冲信号的特性至关重要。 1. **脉冲幅度\(V_m\)**:指...

    数字信号处理-基于计算机的方法(第四版)答案--8章(3).pdf

    例如,在第8章的3部分中,讨论了通过Z变换和滤波器设计来实现信号处理系统。具体地,它通过给出的传递函数H3(z)和G3(z)来展示如何用计算机方法实现信号处理。 在文档中,提到了两种不同的情况: 情况3涉及一个传递...

    遥感数字图像处理课件:第九章遥感图像分类.ppt

    遥感数字图像处理课件:第九章遥感图像分类 遥感数字图像处理是遥感技术中的一种重要应用,通过对遥感图像的处理和分析,可以获取丰富的地理信息。遥感图像分类是遥感数字图像处理中的一个关键步骤,它可以将遥感...

    数据结构第九章作业

    第九章作业主要涉及堆数据结构及其在排序算法中的应用。 堆是一种特殊的树形数据结构,满足堆属性:在大根堆中,每个节点的值都大于或等于其子节点的值;在小根堆中,每个节点的值小于或等于其子节点的值。堆的高度...

    离散时间信号处理 第二章

    在“离散时间信号处理第二章”这一课件中,我们深入探讨了离散时间信号与系统的特性,以及它们在频率域的表示方式。 ### 一、离散时间信号:序列 离散时间信号可以被定义为一系列的数值,这些数值在时间上是离散的...

    数字信号处理Sanjit K.Mitra习题答案

    首先,我们来看"数字信号处理6~9章.rar"这个部分。这四章通常涉及离散时间信号的傅里叶变换、滤波器设计和数字信号处理的基本概念。第六章可能讲解了离散时间傅里叶变换(DTFT)和离散傅里叶变换(DFT),包括其性质...

    数字信号处理(程佩清)第二章习题答案

    《数字信号处理(程佩清)》第二章主要探讨了傅里叶变换在数字信号处理中的应用,包括序列的傅里叶变换计算、傅里叶反变换、线性时不变系统的频率响应以及Z变换等核心概念。以下是这些知识点的详细说明: 1. **...

    数字信号处理算法逻辑基本概念共9章.rar

    第九章:高级话题 作为收尾,本章探讨了一些数字信号处理的前沿课题,如小波变换、多速率信号处理和自适应滤波,为读者提供进一步研究的方向。 以上就是《数字信号处理算法逻辑》九个章节的主要内容,全面覆盖了...

    中文信息处理_第2章资料

    在中文信息处理领域,第二章通常会涉及到基础理论与关键技术,包括字符编码、词法分析、语法分析以及语义理解等方面。以下是对这些知识点的详细阐述: 1. **字符编码**:字符编码是中文信息处理的基础,常见的有GBK...

    操作系统第9章习题答案

    第九章主要讨论了进程调度,这是操作系统核心功能之一,它决定了如何在多个并发进程中分配处理器。本章的习题集中于几种不同的调度策略及其性能分析,包括先来先服务(FCFS)、时间片轮转(RR)、短进程优先(SPN)、最短...

    《发展经济学》马工程课件 9.第九章 城市化与城乡发展.ppt

    《发展经济学》马工程课件中的第九章"城市化与城乡发展"主要探讨了城市化与工业化之间的相互作用,以及城市化过程中可能出现的不平衡现象。城市化,或称城镇化,是指伴随着工业化进程,人口和经济活动从农村向城市...

    数字信号处理:第2章 离散时间信号及离散时间系统.ppt

    《数字信号处理:第2章 离散时间信号及离散时间系统》 本章主要探讨了数字信号处理中的核心概念——离散时间信号及其处理。离散时间信号是数字信号处理的基础,它们在现代通信、音频处理、图像处理等领域有着广泛...

    数字信号处理课后答案 丁玉美 1到9章课后习题答案

    课后习题是巩固学习的重要环节,而本资料提供的是从第一章到第九章的课后习题答案,对于学生理解和掌握课程内容具有极大的帮助。 1. **数字信号处理基础**:数字信号处理与模拟信号处理的区别在于,它将信号转换为...

Global site tag (gtag.js) - Google Analytics