Julia 日期和时间

Julia 通过 Dates 模块提供了以下三个函数来处理日期和时间:

  • Date:表示日期,精确到日,只显示日期。
  • DateTime:表示日期和时间,精确到毫秒。
  • DateTime:表示日时间,精确到纳秒,代表一天 24 小时中的特定时刻。

使用前,我们需要先导入 Dates 模块:

import Dates

Date 和 DateTime 类型可以通过整数或 Period 类型解析。

Period 基于日期值,表示年、月、日等:

Period
Year
Quarter
Month
Week
Day
Hour
Minute
Second
Millisecond
Microsecond
Nanosecond

Date 和 DateTime 都是抽象类型 TimeType 的子类型。

下图展示了日期类型间的关系,点击图片可以放大查看:

输出日期的时间:

实例

julia> import Dates

julia> rightnow = Dates.Time(Dates.now()) # 时间
08:41:15.917

julia> theday = Dates.Date(2022,5,6) # 日期
2022-05-06

julia> today_date = Dates.today()
2022-05-11

julia> Dates.now(Dates.UTC)
2022-05-11T00:44:20.136

# 格式化时间
julia> Dates.DateTime("20220429 120000", "yyyymmdd HHMMSS")
2022-04-29T12:00:00


julia> Dates.DateTime("19/04/2022 17:42", "dd/mm/yyyy HH:MM")
2022-04-19T17:42:00

下表给出了日期格式代码,通过它们可以格式化我们的日期:

字符日期/时间 元素
Y表示年,例如: yyyy => 1984, yy => 84
m表示年,例如: m => 7 or 07
u表示月份简写名称,例如: Jun
U表示月份完整名称,例如: January
e表示简写星期几,例如: Mon
E表示完整星期几,例如: Monday
d表示日,例如: 1 or 01
H表示小时,例如: HH => 00
M表示分钟,例如: MM => 00
S表示秒,例如: S => 00
s表示毫秒,例如: .000

实例

julia> Dates.Date("Sun, 27 Sep 2022", "e, d u y")
2022-09-27

julia> Dates.DateTime("Sun, 27 Sep 2022 10:25:10", "e, d u y H:M:S")
2022-09-27T10:25:10

通过上面的实例我们常见了一些日期时间对象,接下来我们就可以使用这些对象来获取数据(包含年、月、日、分、秒、时等):

实例

julia> theday = Dates.Date(2022,5,6) # 创建日期对象
2022-05-06

# 接下来获取 theday 中的数据
julia> Dates.year(theday)
2022

julia> Dates.month(theday)
5

# 获取当前时间的数据
julia> rightnow = Dates.now()
2022-05-11T08:51:45.342

julia> Dates.minute(rightnow)
51

julia> Dates.hour(rightnow)
8

julia> Dates.second(rightnow)
45

# 获取月份及星期几
julia> Dates.dayofweek(theday)
5

julia> Dates.dayname(theday)
"Friday"

julia> Dates.yearmonthday(theday)
(2022, 5, 6)

julia> Dates.dayofweekofmonth(theday)
1

日期运算

我们可以对日期对象进行算术运算。

比如我们计算两个日期相差几天:

实例

julia> day1 = Dates.Date(2022,1,17)
2022-01-17

julia> day2 = Dates.Date(2022,3,23)
2022-03-23

julia> day2 - day1
65 days

# 使用不同时间单位
julia> Dates.canonicalize(Dates.CompoundPeriod(day2 - day1))
9 weeks, 2 days

我们也可以对日期相加,比如计算 2 年 6个月后的日期:

实例

julia> rightnow = Dates.now()
2022-05-11T09:01:07.946

julia> rightnow + Dates.Year(20) + Dates.Month(6)
2042-11-11T09:01:07.946

# 6 天后的日期
julia> rightnow + Dates.Day(6)
2022-05-17T09:01:07.946

日期范围

Julia 可以通过可迭代的 range(区间范围)对象来创建指定区间的日期。 在下面给出的示例中,我们将创建一个生成每个月的第一天的迭代器。

实例

date_range = Dates.Date(2011,1,1):Dates.Month(1):Dates.Date(2022,1,1)
Dates.Date("2011-01-01"):Dates.Month(1):Dates.Date("2022-01-01")

在上的区间范围对象中,我们可以找出其中哪些属于工作日,这里需要为 filter() 创建一个匿名函数,它将根据给定的日期判断是否为工作日:

实例

julia> weekdaysfromrange = filter(dy -> Dates.dayname(dy) != "Saturday" && Dates.dayname(dy) != "Sunday" , date_range)
94-element Vector{Dates.Date}:
 2011-02-01
 2011-03-01
 2011-04-01
 2011-06-01
 2011-07-01
 2011-08-01
 2011-09-01
 2011-11-01
 2011-12-01
 2012-02-01
 ⋮
 2021-02-01
 2021-03-01
 2021-04-01
 2021-06-01
 2021-07-01
 2021-09-01
 2021-10-01
 2021-11-01
 2021-12-01

四舍五入日期和时间

我们常用 round()、floor() 和 ceil() 函数来对参数进行向上或向下舍入,同样这些函数也可用于对日期进行四舍五入,以便及时向前或向后调整日期。

实例

julia> Dates.now()
2022-05-11T09:17:49.824

julia> Dates.format(round(Dates.DateTime(Dates.now()), Dates.Minute(15)), Dates.RFC1123Format)
"Wed, 11 May 2022 09:15:00"

ceil() 函数将向前调整日期/时间,如下所示:

实例

julia> theday = Dates.Date(2022,5,6)
2022-05-06

# 下个月
julia> ceil(theday, Dates.Month)
2022-06-01

#明年
julia> ceil(theday, Dates.Year)
2023-01-01

#下周
julia> ceil(theday, Dates.Week)
2022-05-09

重复日期

我们可以查找一个区间范围内的重复日期,比如每个周日:

实例

# 创建区间日期
julia> date_range = Dates.Date(2011,1,1):Dates.Month(1):Dates.Date(2022,1,1)
Dates.Date("2011-01-01"):Dates.Month(1):Dates.Date("2022-01-01")
# 使用 filter() 函数过滤出每个周日
julia> filter(d -> Dates.dayname(d) == "Sunday", date_range)
20-element Vector{Dates.Date}:
 2011-05-01
 2012-01-01
 2012-04-01
 2012-07-01
 2013-09-01
 2013-12-01
 2014-06-01
 2015-02-01
 2015-03-01
 2015-11-01
 2016-05-01
 2017-01-01
 2017-10-01
 2018-04-01
 2018-07-01
 2019-09-01
 2019-12-01
 2020-03-01
 2020-11-01
 2021-08-01

Unix 时间

UNIX 时间,或称 POSIX 时间是 UNIX 或类 UNIX 系统使用的时间表示方式:从UTC 1970 年 1 月 1 日 0 时 0 分 0 秒起至现在的总秒数,不考虑闰秒。

time() 函数返回 Unix 值:

实例

julia> time()
1.652232489777e9

unix2datetime() 函数将 Unix 时间转化为日期/时间对象:

实例

julia> Dates.unix2datetime(time())
2022-05-11T01:28:23.493

当下时刻

DateTimes 以毫秒为单位,我们可以使用 Dates.value 函数获取以毫秒计的时间:

实例

julia> moment=Dates.now()
2022-05-11T09:31:31.037

julia> Dates.value(moment)
63787944691037

julia> moment.instant
Dates.UTInstant{Millisecond}(Millisecond(63787944691037))

时间和监控

Julia 为我们提供了 @elapsed 宏,它将返回表达式执行所需的时间(秒数)。

计算以下代码需要执行的时间:

实例

julia> function foo(n)
         for i in 1:n
           x = sin(rand())
         end
       end
foo (generic function with 1 method)


julia> @elapsed foo(100000000)
1.360567967

julia> @time foo(100000000)
  1.363258 seconds

更多实例

实例

julia> DateTime(2013)
2013-01-01T00:00:00

julia> DateTime(2013,7)
2013-07-01T00:00:00

julia> DateTime(2013,7,1)
2013-07-01T00:00:00

julia> DateTime(2013,7,1,12)
2013-07-01T12:00:00

julia> DateTime(2013,7,1,12,30)
2013-07-01T12:30:00

julia> DateTime(2013,7,1,12,30,59)
2013-07-01T12:30:59

julia> DateTime(2013,7,1,12,30,59,1)
2013-07-01T12:30:59.001

julia> Date(2013)
2013-01-01

julia> Date(2013,7)
2013-07-01

julia> Date(2013,7,1)
2013-07-01

julia> Date(Dates.Year(2013),Dates.Month(7),Dates.Day(1))
2013-07-01

julia> Date(Dates.Month(7),Dates.Year(2013))
2013-07-01

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库】将excel数据导入mysql数据库

环境:Windows10 mysql8以上 将你要导入的excel表另存为txt格式 打开txt格式文件,删除表头行并另存为并更改编码方式(由于与数据库的编码不同,会导致导入报错) 通过命令行登录数据库 winr cmd进入 进入装mysql的目录位…

基于BIM+AI的建筑能源优化模型【神经网络】

推荐:用 NSDT设计器 快速搭建可编程3D场景。 AEC(建筑、工程、施工)行业的BIM 技术,允许在实际施工开始之前虚拟地建造建筑物; 这带来了许多有形和无形的好处:减少成本超支、更有效的协调、增强决策权等等。…

Windows批处理基础

一、【echo】显示文本内容 echo | Microsoft Learnhttps://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/echo 显示消息或者打开或关闭命令回显功能。 如果不结合任何参数使用,echo 会显示当前回显设置。 1.1、echo显示文本常用命…

AIGC大模型ChatGLM2-6B:国产版chatgpt本地部署及体验

1 ChatGLM2-6B介绍 ChatGLM是清华技术成果转化的公司智谱AI研发的支持中英双语的对话机器人。ChatGLM基于GLM130B千亿基础模型训练,它具备多领域知识、代码能力、常识推理及运用能力;支持与用户通过自然语言对话进行交互,处理多种自然语言任务…

【SQL】-【计算两个varchar类型的timestamp的毫秒差】

背景 TRANSTAMP3、TRANSTAMP2在Oracle数据库中的类型为varchar,但实际保存的值是时间戳timestamp类型,现在要计算二者的毫秒差 Oracle或MySQL extract(second from (to_timestamp(TRANSTAMP3,yyyy-mm-dd hh24:mi:ss.ff) - to_timestamp(TRANSTAMP2,yyy…

运放电路之比较器的分析笔记

一、比较器 比较器分为同相比较器和反相比较器。 反相比较器电路如下: V11为固定值,这里设定的是2.5V,接到了运放的输入正(V); V10为输入值,值可变,接到了运放的输入负(V…

CADintosh X for mac CAD绘图软件2D CAD 程序 兼容 M1

CADintosh X for Mac是一个功能强大的2D CAD绘图程序,专为Mac用户设计。它由Lemke Software开发,提供了一套丰富的工具和功能,使用户能够轻松创建高质量的技术图纸,平面图和设计。 CADintosh X for Mac具有直观的用户界面&#x…

【雕爷学编程】MicroPython动手做(27)——物联网之掌控板小程序2

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

物联网|按键实验---学习I/O的输入及中断的编程|函数说明的格式|如何使用CMSIS的延时|读取通过外部中断实现按键捕获代码的实现及分析-学习笔记(14)

文章目录 通过外部中断实现按键捕获代码的实现及分析Tip1:函数说明的格式Tip2:如何使用CMSIS的延时GetTick函数原型stm32f407_intr_handle.c解析中断处理函数:void EXTI4_IRQHandler 调试流程软件模拟调试 两种代码的比较课后作业: 通过外部中断实现按键捕获代码的实…

装修小程序,开启装修公司智能化服务的新时代

随着数字化时代的来临,装修小程序成为提升服务质量和效率的关键工具。装修小程序旨在为装修公司提供数字化赋能、提高客户满意度的智慧装修平台。通过装修小程序,装修公司能够与客户进行在线沟通、展示设计方案、提高服务满意度等操作。 装修小程序的好处…

8月5日上课内容 nginx的优化和防盗链

全部都是面试题 nginx的优化和防盗链 重点就是优化: 每一个点都是面试题,非常重要,都是面试题 1、隐藏版本号(重点,一定要会) 备份 cp nginx.conf nginx.conf.bak.2023.0805 方法一:修改配…

HTML 是什么?它的全称是什么?

聚沙成塔每天进步一点点 专栏简介HTML是什么?HTML的全称是什么?写在最后 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对We…

【大模型】开源且可商用的大模型通义千问-7B(Qwen-7B)来了

【大模型】开源且可商用的大模型通义千问-7B(Qwen-7B)来了 新闻通义千问 - 7B 介绍评测表现快速使用环境要求安装相关的依赖库推荐安装flash-attention来提高你的运行效率以及降低显存占用使用 Transformers 运行模型使用 ModelScope 运行模型 量化长文本…

2配置篇:基础功能配置

前言 在上一章节中,我们学习了 NestJS CLI 的用法,得到了一套基础的项目工程。最开始做项目对比的时候也提到过,NestJS 作为一款自定义程度较高的框架,CLI 直接提供的基础功能虽然并不完善,但同时也为开发者提供了非常多的内置或配套的功能例如高速缓存、日志拦截、过滤器…

阿里云平台WoSignSSL证书应用案例

沃通CA与阿里云达成合作并在阿里云平台上线WoSign品牌SSL证书。自上线以来,WoSignSSL证书成为阿里云“数字证书管理服务”热销证书产品,获得阿里云平台客户认可,助力阿里云平台政府、金融、教育、供应链、游戏等各类行业客户实现网站系统数据…

macOS下Django环境搭建

1. macOS升级pip /Library/Developer/CommandLineTools/usr/bin/python3 -m pip install --upgrade pip 2. 卸载Python3.9.5版本 $ sudo rm -rf /usr/local/bin/python3 $ sudo rm -rf /usr/local/bin/pip3 $ sudo rm -rf /Library/Frameworks/Python.framework 3. 安装P…

IO多路转接之select

IO多路转接之select 1. 初识select 系统提供select函数来实现多路复用输入/输出模型。 select系统调用是用来让我们的程序监视多个文件描述符的状态变化的;程序会停在select这里等待,直到被监视的文件描述符有一个或多个发生了状态改变; …

android app控制ros机器人四(调整界面布局)

半吊子改安卓,记录页面布局调整: 在ros-mobile基础上顶端增加一行,用于显示app名称和logo图像;修改标签页。 添加文字简单,但是替换图标长知识了,开始只是简单的把mipmap各个文件夹下的图片进行替换&…

XML 学习笔记 7:XSD

本文章内容参考自: W3school XSD 教程 Extensible Markup Language (XML) 1.0 (Second Edition) XML Schema 2001 XML Schema Part 2: Datatypes Second Edition 文章目录 1、XSD 是什么2、XSD 内置数据类型 - built-in datatypes2.1、基本数据类型 19 种2.1.1、基本…

Stable Diffusion - SDXL 模型测试 (DreamShaper 和 GuoFeng v4) 与全身图像参数配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132085757 图像来源于 GuoFeng v4 XL 模型,艺术风格是赛博朋克、漫画、奇幻。 全身图像是指拍摄对象的整个身体都在画面中的照片&…