Coding for KidsCoding for Kids
创意关卡挑战教师指南
为功能投票
高级 Python 开发课程
第 章
>
第 级

字符串与时间模块
日期/时间模块

目标

使用 Date & Time 模块函数调整记录并设置供应品的运输日期。

新建施工区域附属楼的底层是一个仓库,里面存放着一些最近交付的、已打包并准备运往新施工区域各处的供应品。它们需要贴上正确的日期和时间标签,并确保已贴标签的记录中包含所有相关信息。为此,我们可以花时间手动编写和格式化日期和时间,但使用日期和时间模块会更快捷。

通过编写 import datetime 导入日期和时间模块,这将解锁一系列强大的函数,使你能够读取和设置格式化的日期和时间,并将其存储在对象中。你也可以使用:from datetime import timezone, timedelta 来设置时区。导入该模块后,可使用以下函数:

  • datetime.datetime(): 允许你设置并存储你选择的时间,接受以下几个参数:yearmonthdayhourminutesecondmicrosecondtimezone。你不必输入所有参数,只需输入你想使用的参数即可。
  • datetime.datetime.now(): 返回你当前的日期和时间,就像钟表上显示的一样。
  • datetime.datetime.date(): 仅返回日期部分,不包含时间。
  • datetime.datetime.time(): 仅返回时间部分,不包含日期。
  • datetime.datetime.timestamp(): 以 UNIX 代码的形式返回日期时间的时间戳。
  • timezone(): 允许你为日期和时间参数设置时区。
  • datetime.strftime(): 允许你提取日期和时间的特定信息,并使用特定代码按照你的喜好格式化。就我们的目的而言,我们将使用以下代码:
    • "%a" : 星期几(缩写)
    • "%d" : 月中的日期
    • "%B" : 月份名称(完整写法)
    • "%I" : 小时(12 小时制)
    • "%M" : 分钟
    • "%p" : 上午/下午
    • "%x" : 本地日期格式
    • "%X" : 本地时间格式
    • "%j" : 一年的第几天
    • "%U" : 一年的第几周
    • "%z" : UTC 时区

首先,前往带有浅色 X 标记的区域并面向书桌,使用 read() 函数检查装运的打包日期以及项目的开始和结束日期。记录文档中提供的开始和结束日期(格式为月/日/年)。备忘录中最初书写的前三(3)个数据点以及时区已在代码编辑器中预先写好,以便后续函数使用。

在同一位置,创建一个名为 today 的变量,并将 datetime.datetime.now() 的返回值存入其中。使用 str() 函数将该值转换为字符串,使其可读,例如:today = str(datetime.datetime.now())。接着,使用 display() 函数将今天的日期记录在备忘录上,这样就为运输分配设置了日期,并且你可以开始向必要区域添加缺失的数据点。

前往靠近书桌旁带有金色 X 标记的区域,我们将计算并记录该项目所需的天数。编辑器中已有两个变量 startend 用于存储日期时间。请在提供的区域记下你先前读取的开始和结束日期。创建一个名为 result 的变量,并将 endstart 变量相减的结果存入其中。使用 str() 函数将该值转换为可读字符串格式,例如:result = str(end-start)。接着,使用 write() 函数记录下 result 变量,以标明所需时间。

接下来,我们将前往位于红地毯旁边的金色 X 标记区域,然后移动到左侧栏中红地毯箱子旁的 X 标记处。在这里,我们将使用 datetime() 添加装箱日期中缺失的特定部分。编辑器中预先分配给变量 red_date 的日期将被用来提取各种数据,并用于给箱子贴标签。

对于红色地毯区域:

  • 在金色 X 标记处,面向箱子,创建一个名为 red_days 的变量,将 red_date 变量中的日期(不含时间)通过 date() 方法获取,并转换为字符串,例如:red_days = str(red_date.date())。使用 write() 函数利用 red_days 为箱子贴标签。

  • 在浅色 X 标记处,面向箱子,创建一个名为 red_time 的变量,将 red_date 变量中的时间(不含日期)通过 time() 方法获取,并转换为字符串,例如:red_time = str(red_date.time())。使用 write() 函数利用 red_time 为箱子贴标签。

  • 在暗色 X 标记处,面向箱子,创建一个名为 red_timestamp 的变量,将 red_date 变量计算得到的时间戳存入其中,例如:red_timestamp = red_date.timestamp()。使用 write() 函数利用 red_timestamp 为箱子贴标签。

接下来,移动至蓝色地毯箱子前的 X 标记区域。与之前类似,这里也有三个不同颜色的 X 标记,此处引用预先写好的 blue_date 变量来完成标签。沿着该列,使用 strftime() 函数为运输标签添加缺失的元素。与之前的函数不同,此函数需要特定代码来提取并格式化目标日期中的元素。例如,如果我们想获取 blue_date 变量代表的星期几,则使用代码 "%a"strftime() 函数,如:blue_date.strftime("%a")

对于蓝色地毯区域的 X 标记,使用 strftime() 函数和所需的特定代码。请根据要求查看前述代码列表。

对于蓝色地毯:

  • 在金色 X 标记处,面向箱子,创建一个名为 blue_weekday 的变量,将 blue_date 变量中代表星期几的部分通过 strftime() 获取,格式为:blue_day = blue_date.strftime("%a")。接着,创建另一个变量 blue_day 并存储 blue_date 变量中代表月中日的信息,通过 strftime() 获取。再创建一个变量 blue_month 并存储 blue_date 变量中代表完整月份名称的信息,同样通过 strftime() 获取。将 blue_weekdayblue_dayblue_month 变量插入到预先写好的 write() 函数中。

  • 在浅色 X 标记处,面向箱子,创建一个名为 blue_hour 的变量,将 blue_date 变量中代表12 小时制小时的信息通过 strftime() 获取。接着,创建一个变量 blue_minute 并存储 blue_date 变量中代表分钟的信息,通过 strftime() 获取。再创建一个变量 blue_meridian 并存储 blue_date 变量中代表上午/下午的信息,通过 strftime() 获取。将 blue_hourblue_minuteblue_meridian 变量插入到预先写好的 write() 函数中。

  • 在暗色 X 标记处,面向箱子,创建一个名为 blue_local_date 的变量,将 blue_date 变量中代表本地日期格式的信息通过 strftime() 获取。再创建一个变量 blue_local_time 并存储 blue_date 变量中代表本地时间格式的信息,通过 strftime() 获取。将 blue_local_dateblue_local_timeblue_meridian 变量插入到预先写好的 display() 函数中。

最后,我们将前往位于绿色地毯旁的金色 X 标记区域,然后移动到右侧栏中绿色地毯箱子旁的 X 标记处。在这里,我们将继续使用 strftime() 添加装箱日期中缺失的特定部分。编辑器中预先分配给变量 green_date 的日期将被用来提取各种数据,并用于给箱子贴标签。

对于绿色地毯:

  • 在金色 X 标记处,面向箱子,创建一个名为 green_day 的变量,将 green_date 变量中代表一年的第几天的信息通过 strftime() 获取。使用 write() 函数利用 green_day 为箱子贴标签。

  • 在浅色 X 标记处,面向箱子,创建一个名为 green_week 的变量,将 green_date 变量中代表一年的第几周的信息通过 strftime() 获取。使用 write() 函数利用 green_week 为箱子贴标签。

  • 在暗色 X 标记处,面向箱子,创建一个名为 green_timezone 的变量,将 green_date 变量中代表UTC 时区的信息通过 strftime() 获取。使用 write() 函数利用 green_timezone 为箱子贴标签。

一旦所有带有不同颜色地毯旁的 X 标记处的标签都被记录下来,该关卡就完成了。

代码书