(delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)

Object Pascal 学习笔记,Delphi 11 编程语言的完整介绍 作者: Marco Cantu 笔记:豆豆爸

2.5 日期和时间

​ 早期版本的Pascal 语言中,没有原生的日期和时间类型,但是 Object Pascal 引入了一种原生的日期和时间类型,使用浮点表示来处理日期和时间信息。更确切地说,System 单元为此定义了一个特定的 TDateTime 数据类型。

​ 这是一个浮点类型,因为它必须足够宽以在单个变量中存储年、月、日、小时、分钟和秒,精确到毫秒精度:

  • 日期用自1899-12-30以来的天数表示,存储在 TDateTime 值的整数部分中,负值表示1899年之前的日期
  • 时间以一天的分数形式存储在值的小数部分中

注解: 如果您想知道这个奇怪的日期从何而来,背后的故事相当长,与 Excel 和 Windows 应用程序中日期表示有关。当时的想法是将第 1 天视为 1900 年 1 月 1 日,这样 1899 年的除夕就是第 0 天。然而,该日期表示法的最初开发者却忘记了 1900 年不是闰年,因此后来把计算结果调整了 1 天,将 1900 年 1 月 1 日变成了第 2 天。1900 年 1 月 1 日变成了第 2 天。

​ 正如签名提到的,TDateTime 不是编译器预定义类型,但是它在 System 单元中定义如下:

type
  TDateTime = type Double;

注解: System 单元在某种程度上几乎可以被视为核心语言的一部分,因为它总是自动包含在每次编译中,而不需要uses语句(实际上,将 System 单元添加到uses部分会导致编译错误)。但从技术上讲,该单元是运行时库(RTL)的核心部分,将在第 17 章中介绍。

​ 还有两种相关类型可以处理 TDateTime 结构中的时间和日期部分,分别定义为 TDate 和 TTime。这些特定类型是完整 TDateTime 类型的别名,但系统函数会对它们进行处理,修剪数据中未使用的部分。

​ 使用日期和时间数据类型非常简单,因为 Delphi 包含了许多对该类型进行操作的函数。System.SysUtils 单元中有几个核心函数,还有许多相关函数在System.DateUtils 单元中(尽管名称不同,但也包括用于操作时间的函数)。

以下是一些常用的日期/时间操作函数的简短列表:

  • Now:将当前日期和时间返回为日期/时间值。
  • Date:仅返回当前日期。
  • Time:仅返回当前时间。
  • DateTimeToStr:使用默认格式将日期和时间值转换为字符串;如果要对转换进行更多控制,请使用 FormatDateTime 函数。
  • DateToStr:将日期/时间值的日期部分转换为字符串。
  • TimeToStr:将日期/时间值的时间部分转换为字符串。
  • FormatDateTime:使用指定的格式格式化日期和时间;通过提供复杂的格式字符串,您可以指定要查看的值以及要使用的格式。
  • StrToDateTime:将包含日期和时间信息的字符串转换为日期/时间值,如果字符串格式出错,则会引发异常。如果出现错误,其配套函数 StrToDateTimeDef 会返回默认值,而不会引发异常。
  • DayOfWeek:返回与作为参数传递的日期/时间值的星期相对应的数字(使用区域设置配置)。
  • DecodeDate:从日期值中提取年、月和日的值。
  • DecodeTime:从日期值中提取小时、分钟、秒和毫秒。
  • EncodeDate:将年、月和日的值转换为日期/时间值。
  • EncodeTime:将小时、分钟、秒和毫秒值转换为日期/时间值。

​ 为了向您展示如何使用这种数据类型以及相关的一些例程,我构建了一个简单的示例,名为 TimeNow。当程序启动时,它会自动计算并显示当前的时间和日期。

var
  StartTime: TDateTime;
begin
  StartTime := Now;
  Show('Time is ' + TimeToStr(StartTime));
  Show('Date is ' + DateToStr(StartTime));
end;

​ 第一条语句是对 Now 函数的调用,它返回当前的日期和时间。此值存储在 StartTime 变量中。

注解: 与 C 风格的语言不同,当使用 Object Pascal 函数没有参数时,无需键入空括号。

​ 接下来的两条语句显示了 TDateTime 值的时间部分(转换为字符串)和相同值的日期部分。这就是程序的输出(取决于系统的区域设置配置):

Time is 6:33:14 PM
Date is 10/7/2020

​ 要编译此程序,您需要引用 System.SysUtils 单元中的函数(“system utilities” 的简称)。除了调用 TimeToStrDateToStr之外,您还可以使用更强大的 FormatDateTime 函数。

​ 请注意,时间和日期值会根据系统的国际设置转换成字符串。日期和时间格式化信息将根据操作系统和区域设置从系统中读取,并填充到 TFormatSettings 数据结构中。如果需要自定义格式,可以创建该类型的自定义结构,并将其作为参数传递给大多数日期时间格式化函数。

注解: TimeNow 项目还有第二个按钮,可以用来启用定时器(Timer)。计时器是一个组件,会自动执行事件处理程序(按照您指定间隔)。如果启用定时器,就会看到当前时间的每1秒都会添加到列表中。更有用的用户界面是每秒更新一个标签,显示当前时间,基本上就是建立了一个时钟。

2.5.1 日期时间辅助

​ 为了更方便地操作 TDateTime 数据类型,Delphi 11 引入了一个特定的类型辅助,类似于我们在本章前面已经看到的本地数据类型。TDateTime 的记录助手名为 TDateTimeHelper,定义在 System.DateUtils 单元中。可用的操作包括获取月份或年份的第一天,或转换为 Unix 日期格式,检查上午/下午,查找是否是闰年等等。记录辅助有150多个方法,在此不一一列举。

TDateTime 助手类型还引入了一个新的 NowUTC 操作(UTC 时区中的当前时间),经典 RTL 中没有这个操作。以下是一个示例代码片段,还显示了两个辅助调用的串联,TomorrowToString

uses
  DateUtils;

procedure TForm1.Button1Click(Sender: TObject);
begin
  var MyDate: TDateTime := TDateTime.NowUTC;
  MyDate.Tomorrow.ToString;
end;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335255.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

php array_diff 比较两个数组bug避坑 深入了解

今天实用array_diff出现的异常问题,预想的结果应该是返回 "integral_initiate">"0",实际没有 先看测试代码: $a ["user_name">"测","see_num">0,"integral_initiate&quo…

开发实践8_REST

一、Django REST Framework, Django View & APIView MTV模式实现前后端分离。Representational State Transfer 表现层状态转化。Representation 资源(Resource a specific info. on net.)具体呈现形式。ST 修改服务端的数据。修改数据 POST请求。…

LeetCode、2300. 咒语和药水的成功对数【中等,排序+二分】

文章目录 前言LeetCode、2300. 咒语和药水的成功对数【中等,排序二分】题目及类型思路及代码 资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域…

2024年显著性检测论文及代码汇总(1)

ACM MM Distortion-aware Transformer in 360 Salient Object Detection code Abstacrt:现有的方法无法处理二维等矩投影引起的畸变。本文提出了一个基于Transformer的模型,即DATFormer。首先,引入两个畸变自适应模块。其一是畸变映射模块&…

【Spring Boot 3】【Redis】基本数据类型操作

【Spring Boot 3】【Redis】基本数据类型操作 背景介绍开发环境开发步骤及源码工程目录结构 背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工…

tidb Cloud 连接spring boot 项目

一、 免费试用tidbitcloud TiDB Cloud Documentation | PingCAP Docs 1.github账号登录 2.创建集群 3.点击对应集群cludter0 导入数据 导入 本地导入只支持csv文件,其他导入需要AWZ账号使用S3云存储 二、连接spingboot项目 选择java,复制下面的jd…

前台vue配置

前台 vue环境 1.傻瓜式安装node: 官网下载:https://nodejs.org/zh-cn/2.安装cnpm: >: npm install -g cnpm --registryhttps://registry.npm.taobao.org3.安装vue最新脚手架: >: cnpm install -g vue/cli注:如果2、3步报错,清除缓…

美团RASP大规模研发部署实践总结

01 背景 RASP 是 Runtime Application Self-Protection(运行时应用自我保护)的缩写,是一种应用程序安全技术。RASP 技术能够在应用程序运行时检测并阻止应用级别的攻击。随着云计算和大数据的发展,应用程序安全越来越受到重视。其…

总结网络中的一些基本概念

1. IP地址 描述一个设备在网络上的位置,而且计算机是通过数字来描述IP地址的。例如(生活中的地址) 2. 端口号 描述一个主机上的哪个应用程序,有了IP可以确定主机,但是一个主机上可能有很多程序在使用网络,…

CloudPanel RCE漏洞复现(CVE-2023-35885)

0x01 产品简介 CloudPanel 是一个基于 Web 的控制面板或管理界面,旨在简化云托管环境的管理。它提供了一个集中式平台,用于管理云基础架构的各个方面,包括虚拟机 (VM)、存储、网络和应用程序。 0x02 漏洞概述 由于2.3.1 之前的 CloudPanel 具有不安全的文件管理器 cook…

Docker技巧汇总

Docker技巧汇总 前言使用流程安装配置镜像管理创建并运行容器使用容器/常用命令导出和导入查看元数据挂载数据卷端口映射/转发VS Code连接Docker 前言 Docker 是一个开源的应用容器引擎,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…

go语言(八)---- map

map的声明方式有以下三种。 package mainimport "fmt"func main() {//第一种声明方式//声明map1是一个map类型,key是String,value是Stringvar myMap1 map[string] stringif myMap1 nil {fmt.Println("myMap1 是一个空map")}//在使…

AI时代—ChatGPT-4.5的正确打开方式

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

Python初识——小小爬虫

一、找到网页端url 打开浏览器,打开百度官方网页点击图片,打开百度图片 鼠标齿轮向下滑,点击宠物图片 进入宠物图片网页,在网页空白处点击鼠标右键,弹出的框中最下方显示“检查”选项,点击(我是…

搭建一个JavaWeb项目流程详解

搭建一个JavaWeb项目流程 本文致力于,让编程者一步步明白书写一个JavaWeb项目应该做些什么,梳理清楚流程框架,需要的jar包,同时手写了一个分页工具类也在其中,让你在编程中更加丝滑。 1.src\main\java\com\einmeer\qia…

springboot中一些注解

springboot中一些注解 1:项目启动时会去扫描启动的注解,一般是启动时就想要被加载的方法: 2:springBoot中MSApplication启动类的一些其他注解: EnableAsync:这是一个Spring框架的注解,它用于开启方法异步调用的功能。当…

【MySQL自身的性能优化】InnoDB 的 Buffer Pool

这里写目录标题 一、引入缓存的重要性二、InnoDB 的 Buffer Pool1. Buffer Pool 内部组成2. free 链表管理空闲页3. flush 链表管理脏页4. LRU 链表提高缓存命中那咱需要咋地解决预读问题呢?那咱需要咋地解决 Buffer Pool 污染问题呢? 5. 脏页什么时候被…

pyqt5+python子域名扫描程序

import sysfrom PyQt5 import uic from PyQt5.QtWidgets import * #requests库内置了不同的方法来发送不同类型的http请求 import requests#BS主要功能是从网页抓取数据,提供一些简单的、python 式的函数用来处理导航、搜索、修改分析树等功能 from bs4 import Beau…

WebSocket协议、与HTTP对比

WebSocket 也可前往本人的个人网站进行阅读 WebSocket 和 HTTP WebSocket和HTTP协议一样,都是基于TCP协议实现的应用层协议。 HTTP协议通常是单边通信,主要用于传输静态文档、请求-响应通信,适用于Web浏览器加载网页、API调用等。然而Web…

NX二次开发获取圆弧的四个象限点

我是用来用来画水路线框的UF_MODL_ask_curve_points()可以按弧长或者弧度获取曲线的等分点,取PI/2的圆弧,即将圆弧四等分,你也可以取任意等分点。 int GetArcPoint(tag_t arc_tag,double point[4][3]) {if(arc_tag0)r…