# maketime 脚本和图表功能

此函数用于返回根据小时 hh、分钟 mm 和秒 ss 计算的时间。

语法：

MakeTime(hh [ , mm [ , ss ] ])

返回数据类型： 双

参数

| 参数 | 描述 |
| --- | --- |
| hh | 作为整数的小时。 |
| mm | 作为整数的分钟。<br><br>如果未指定分钟，则假定为 00。 |
| ss | 作为整数的秒。<br><br>如果未指定秒，则假定为 00。 |

## 适合使用 maketime 的情况

`maketime()` 函数通常在脚本中用于生成数据以生成时间字段。有时，当时间字段是从输入文本派生的时，可以使用此函数使用其组件来构造时间。

以下示例使用时间格式 `h:mm:ss`。时间格式已经在数据加载脚本顶部的 `SET TimeFormat` 语句中指定。可以根据要求更改示例中的格式。

函数示例

| 示例 | 结果 |
| --- | --- |
| `maketime(22)` | 返回 22:00:00。 |
| `maketime(22, 17)` | 返回 22:17:00。 |
| `maketime(22,17,52 )` | 返回 22:17:52。 |

## 区域设置

除非另有规定，本主题中的示例使用以下日期格式：MM/DD/YYYY。日期格式已经在数据加载脚本中的 `SET DateFormat` 语句中指定。由于区域设置和其他因素，系统中的默认日期格式可能有所不同。您可以更改以下示例中的格式以满足您的要求。或者，您可以更改加载脚本中的格式以匹配这些示例。有关更多信息，请参阅[修改应用程序和脚本的区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)。

应用程序中的默认区域设置基于用户配置文件。这些区域格式设置与 Qlik Cloud 用户界面中显示的语言无关。Qlik Cloud 将以与您使用的浏览器相同的语言显示。

如果你是应用程序创建者，你可以为自己创建的应用程序设置默认区域。有关更多信息，请参阅[设置 Qlik Cloud Analytics 中创建应用程序和脚本所用的首选区域设置](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)。

## 示例 1 – maketime()

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/maketime.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 包含交易集的数据集，该数据集加载到名为 `Transactions` 的表中。

* 跨三个字段提供的交易时间：`hours`、`minutes` 和 `seconds`。

* 创建字段 `transaction_time`，以系统变量 `TimeFormat` 的格式返回时间。

加载脚本

```
SET TimeFormat='h:mm:ss TT';

Transactions:
    Load
        *,
        maketime(transaction_hour, transaction_minute, transaction_second) as transaction_time
        ; 
Load * Inline [
transaction_id, transaction_hour, transaction_minute, transaction_second, transaction_amount, transaction_quantity, customer_id
3750, 18, 43, 30, 12423.56, 23, 2038593
3751, 6, 32, 07, 5356.31, 6, 203521
3752, 12, 09, 16, 15.75, 1, 5646471
3753, 21, 43, 41, 7, 3036491
3754, 17, 55, 22, 21484.21, 1356, 049681
3756, 2, 52, 22, -59.18, 2, 2038593
3757, 9, 25, 23, 3177.4, 21, 203521
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `transaction_hour`

* `transaction_minute`

* `transaction_second`

* `transaction_time`

结果表

| transaction\_hour | transaction\_minute | transaction\_second | transaction\_time |
| --- | --- | --- | --- |
| 2 | 52 | 22 | 2:52:22 AM |
| 6 | 32 | 07 | 6:32:07 AM |
| 9 | 25 | 23 | 9:25:23 AM |
| 12 | 09 | 16 | 12:09:16 PM |
| 17 | 55 | 22 | 5:55:22 PM |
| 18 | 43 | 30 | 6:43:30 PM |
| 21 | 43 | 41 | 9:43:41 PM |

`transaction_time` 字段是在前置 Load 语句中创建的，方法是使用 maketime() 函数并将小时、分钟和秒字段作为函数参数传递。``

然后，该函数将这些值组合并转换为时间字段，以 `TimeFormat` 系统变量的时间格式返回结果。

## 示例 2 – time() 函数

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/maketime.htm)

#### 加载脚本和结果

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 与第一个示例相同的数据集和场景。

* 创建一个字段 `transaction_time`，这将允许我们在不修改 `TimeFormat` 系统变量的情况下以 24 小时时间格式显示结果。

加载脚本

```
SET TimeFormat='h:mm:ss TT';

Transactions:
    Load
        *,
        time(maketime(transaction_hour, transaction_minute, transaction_second),'h:mm:ss') as transaction_time
        ; 
Load * Inline [
transaction_id, transaction_hour, transaction_minute, transaction_second, transaction_amount, transaction_quantity, customer_id
3750, 18, 43, 30, 12423.56, 23, 2038593
3751, 6, 32, 07, 5356.31, 6, 203521
3752, 12, 09, 16, 15.75, 1, 5646471
3753, 21, 43, 41, 7, 3036491
3754, 17, 55, 22, 21484.21, 1356, 049681
3756, 2, 52, 22, -59.18, 2, 2038593
3757, 9, 25, 23, 3177.4, 21, 203521
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `transaction_hour`

* `transaction_minute`

* `transaction_second`

* `transaction_time`

结果表

| transaction\_hour | transaction\_minute | transaction\_second | transaction\_time |
| --- | --- | --- | --- |
| 2 | 52 | 22 | 2:52:22 |
| 6 | 32 | 07 | 6:32:07 |
| 9 | 25 | 23 | 9:25:23 |
| 12 | 09 | 16 | 12:09:16 |
| 17 | 55 | 22 | 17:55:22 |
| 18 | 43 | 30 | 18:43:30 |
| 21 | 43 | 41 | 21:43:41 |

在本例中，`maketime()` 函数嵌套在 `time()` 函数内部。`time()` 函数的第二个参数将 `maketime()` 函数结果的格式设置为所需的 `h:mm:ss`。

## 示例 3 – 图表对象示例

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/maketime.htm)

#### 加载脚本和图表表达式

概述

打开数据加载编辑器，并将下面的加载脚本添加到新部分。

加载脚本包含：

* 包含交易集的数据集，该数据集加载到名为 `Transactions` 的表中。

* 跨两个字段提供的交易时间： `hours` 和 `minutes`。

* 创建字段 `transaction_time`，以系统变量 `TimeFormat` 的格式返回时间。

创建一个图表对象度量 `transaction_time`，返回格式为 `h:mm:ss TT` 的日期。

加载脚本

```
SET TimeFormat='h:mm:ss TT';

Transactions:
Load * Inline [
transaction_id, transaction_hour, transaction_minute, transaction_amount, transaction_quantity, customer_id
3750, 18, 43, 12423.56, 23, 2038593
3751, 6, 32, 5356.31, 6, 203521
3752, 12, 09, 15.75, 1, 5646471
3753, 21, 43, 7, 3036491
3754, 17, 55, 21484.21, 1356, 049681
3756, 2, 52, -59.18, 2, 2038593
3757, 9, 25, 3177.4, 21, 203521
];
```

结果

加载数据并打开工作表。创建新表并将这些字段添加为维度：

* `transaction_hour`

* `transaction_minute`

要计算 `transaction_time`，请创建此度量：

`=maketime(transaction_hour,transaction_minute)`

结果表

| transaction\_hour | transaction\_minute | =maketime(transaction\_hour, transaction\_minute) |
| --- | --- | --- |
| 2 | 52 | 2:52:00 AM |
| 6 | 32 | 6:32:00 AM |
| 9 | 25 | 9:25:00 AM |
| 12 | 09 | 12:09:00 PM |
| 17 | 55 | 5:55:00 PM |
| 18 | 43 | 6:43:00 PM |
| 21 | 43 | 9:43:00 PM |

通过使用 `maketime()` 函数并将小时和分钟字段作为函数参数传递，在图表对象中创建 `transaction_time` 度量。

然后，函数将这些值组合起来，并假定秒为 00。然后将这些值转换为时间字段，以 `TimeFormat` 系统变量的格式返回结果。

## 示例 4 – 场景

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/maketime.htm)

#### 加载脚本和图表表达式

概述

创建 2022 年 1 月的日历数据集，分为 8 小时增量。

加载脚本

```
SET TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';

tmpCalendar:
	load 
		*
    where year(date)=2022;
load
	date(recno()+makedate(2021,12,31)) as date
AutoGenerate 31;

Left join(tmpCalendar)
load
	maketime((recno()-1)*8,00,00) as time
autogenerate 3;

Calendar:
load
	timestamp(date + time) as timestamp
resident tmpCalendar;

drop table tmpCalendar;
```

结果

结果表

| 时间戳 |
| --- |
| 1/1/2022 12:00:00 AM |
| 1/1/2022 8:00:00 AM |
| 1/1/2022 4:00:00 PM |
| 1/2/2022 12:00:00 AM |
| 1/2/2022 8:00:00 AM |
| 1/2/2022 4:00:00 PM |
| 1/3/2022 12:00:00 AM |
| 1/3/2022 8:00:00 AM |
| 1/3/2022 4:00:00 PM |
| 1/4/2022 12:00:00 AM |
| 1/4/2022 8:00:00 AM |
| 1/4/2022 4:00:00 PM |
| 1/5/2022 12:00:00 AM |
| 1/5/2022 8:00:00 AM |
| 1/5/2022 4:00:00 PM |
| 1/6/2022 12:00:00 AM |
| 1/6/2022 8:00:00 AM |
| 1/6/2022 4:00:00 PM |
| 1/7/2022 12:00:00 AM |
| 1/7/2022 8:00:00 AM |
| 1/7/2022 4:00:00 PM |
| 1/8/2022 12:00:00 AM |
| 1/8/2022 8:00:00 AM |
| 1/8/2022 4:00:00 PM |
| 1/9/2022 12:00:00 AM |
| + 68 更多行 |

初始 autogenerate 函数在名为 tmpCalendar 的表中创建一个日历，其中包含 1 月份的所有日期。

创建了包含三条记录的第二个表。对于每个记录，recno() – 1 取（值0、1、2），并将结果乘以 8。因此，生成值 0、8 16。这些值用作 maketime() 函数中的小时参数，分钟和秒值为 0。因此，该表包含三个时间字段：12:00:00 AM、8:00:00 AM 和 4:00:00 PM。

这张表与 tmpCalendar 表相联接。因为联接的两个表之间没有匹配的字段，所以时间行被添加到每个日期行。因此，每个日期行现在用每个时间值重复三次。

最后，日历表是从 tmpCalendar 表的常驻负载创建的。日期和时间字段在 timestamp() 函数中连接和包装，以创建时间戳字段。

然后将 tmpCalendar 表放下。