> For the complete documentation index, see [llms.txt](https://bob-mcd-team.gitbook.io/uefi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bob-mcd-team.gitbook.io/uefi/uefi-development/vfr/67.vfr-date-time.md).

# 67. VFR 추가 입력 요소 Part 3: date & time

## `date` 요소

이번 챕터는 날짜를 저장하는데 사용하는 `date` 입력 요소를 살펴보겠다.\
(<https://edk2-docs.gitbook.io/edk-ii-vfr-specification/2_vfr_description_in_bnf/211_vfr_form_definition#2.11.6.9-vfr-date-statement-definition>)

아래의 코드를 `Form.vfr`에 추가해야 한다.

```
date
  varid = FormData.DateValue,
  prompt = STRING_TOKEN(DATE_PROMPT),
  help = STRING_TOKEN(DATE_HELP),
enddate;
```

추가로 `Strings.uni`에도 아래의 문자열을 추가해야 한다.

```
#string DATE_PROMPT            #language en-US  "Date prompt"
#string DATE_HELP              #language en-US  "Date help"
```

날짜는 특수 EFI\_HII\_DATE 유형으로 인코딩 된다.\
(<https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Uefi/UefiInternalFormRepresentation.h>)

```
typedef struct {
  UINT16    Year;
  UINT8     Month;
  UINT8     Day;
} EFI_HII_DATE;
```

따라서 이를 이전과 동일하게 Data.h의 구조에 추가해주겠다.

```
typedef struct {
  ...
  EFI_HII_DATE DateValue;
} UEFI_VARIABLE_STRUCTURE;
```

결과적으로 아래와 같은 화면이 나온다.

<figure><img src="https://224378457-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAFiQ5sYs9AjXHJxMFpe%2Fuploads%2FUvEXXI5JljD60d8IUgAg%2Fimage.png?alt=media&amp;token=31f16e81-68fe-4361-adb5-7098e8a157f3" alt=""><figcaption></figcaption></figure>

값은 `MM/DD/YYYY` 형식으로 표시된다. 따라서 날짜의 조건에 맞게 값을 넣어줘야 한다. 이외에도 윤년도 검사하기 때문에 `02/29/2020`는 입력할 수 있지만 `02/29/2021`은 입력이 안된다.

## `time` 요소

`time` VFR 입력 요소는 시간을 저장하는 데 사용된다\
(<https://edk2-docs.gitbook.io/edk-ii-vfr-specification/2_vfr_description_in_bnf/211_vfr_form_definition#2.11.6.10-vfr-time-statement-definition>).

아래의 코드를 `Form.vfr`에 추가 해야한다.

```
time
  varid = FormData.TimeValue,
  prompt = STRING_TOKEN(TIME_PROMPT),
  help = STRING_TOKEN(TIME_HELP),
endtime;
```

`Strings.uni`에 문자열 또한 추가해주자.

```
typedef struct {
  UINT8    Hour;
  UINT8    Minute;
  UINT8    Second;
} EFI_HII_TIME;
```

추가로 `Data.h`의 구조에 아래의 코드도 추가해주자.

```
typedef struct {
  ...
  EFI_HII_TIME TimeValue;
} UEFI_VARIABLE_STRUCTURE;
```

결과는 결론적으로 아래와 같이 나오며 `date`와 동일하게 `HII Form Browser`에 유효하지 않은 시간 값은 설정이 불가능하다.

![](https://224378457-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FgAFiQ5sYs9AjXHJxMFpe%2Fuploads%2FHjGu52wX5b8EeS68ltGE%2Fimage.png?alt=media\&token=fcaca9db-d95a-459e-8f35-9c9d7833885d)
