# maketime - 指令碼與圖表函數

此函數會傳回從小時 hh、分鐘 mm 及秒 ss 計算而得的時間。

語法：

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

傳回的資料類型： 雙值

引數

| 引數 | 描述 |
| --- | --- |
| hh | 小時為整數。 |
| mm | 分鐘為整數。<br><br>如未指定分鐘，則會採用 00。 |
| ss | 秒為整數。<br><br>如未指定秒，則會採用 00。 |

## 什麼情況下使用

通常會在用於資料產生的指令碼中使用 `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` 陳述式中指定。由於地區設定和其他因素，您系統中的預設日期格式可能會不同。您可以變更以下範例中的格式，以滿足您的需求。或者，您可以在載入指令碼中變更格式，以符合這些範例。

應用程式中的預設地區設定是根據安裝 Qlik Sense 之電腦或伺服器的地區系統設定。若您存取的 Qlik Sense 伺服器設定為瑞典，資料載入編輯器將會對日期、時間和貨幣使用瑞典文地區設定。這些地區格式設定與 Qlik Sense 使用者介面中顯示的語言無關。Qlik Sense 顯示的語言將與您正在使用的瀏覽器相同。

## 範例 1 – maketime()

[](https://help.qlik.com/en-US/sense/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/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/DateAndTimeFunctions/maketime.htm)

#### 載入指令碼和結果

概覽

開啟資料載入編輯器並將下面的載入指令碼新增至新的索引標籤。

載入指令碼包含：

* 與第一個範例相同的資料集和情境。

* 建立欄位 `transaction_time`，這可讓我們以 24 小時時間格式顯示結果，而不必修改 `TimeFormat` 系統變數。

載入指令碼

```
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/sense/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 |

`transaction_time` 量值在圖表物件中的建立方式是使用 `maketime()` 函數並傳遞小時和分鐘欄位，作為函數引數。

然後該函數會合併這些值，秒數假設為 00。然後這些值會轉換為時間欄位，以 `TimeFormat` 系統變數格式傳回結果。

## 範例 4 – 情境

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

#### 載入指令碼和圖表運算式

概覽

建立 2022 年 1 月的行事曆資料集，分為八小時增量。

載入指令碼

```
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 表格。