---
url: >-
  /statelake/scripting-reference/functions-and-procedures/conversion-functions/formatdatetime.md
---

# FormatDateTime

**FormatDateTime** converts a **DateTime** value into a **String** data type, using an acceptable provided format.

The **FormatDateTime** function provides rich formatting of the **TDateTime** value **DateTime** into a string.

Formatting is defined by the formatting string **Format**, which can comprise a mix of ordinary characters (that are passed unchanged to the result string), and data formatting characters - see below for a list of characters.

This formatting is best explained by the example code.

More information can be reviewed at [Date And Time Format Specifiers](/statelake/scripting-reference/functions-and-procedures/formatting-functions/format-specifiers/date-and-time-format-specifiers).

This is commonly used when you need to build a **String** and concatenate a **Datetime** value.

Declaration: Function FormatDateTime( const Format : string; DateTime : TDateTime) : string

An example,

```pascal
procedure OnMapEvent(var Value:Variant);
var
  MyDate : TDateTime;
begin
  MyDate := Now;

 //Value will be equal to the time of the call e.g. '26/07/2006 18:35'
  Value := FormatDateTime('dd/mm/yyyy hh:nn',MyDate);
end;
```

This function is also classed as a **DateTime Function**.

The following formatting character strings can be used in the formatting string -

* y = Year last 2 digits
* yy = Year last 2 digits
* yyyy = Year as 4 digits
* m = Month number no-leading zero (0)
* mm = Month number as 2 digits
* mmm = Month using ShortDayNames (Jan)
* mmmm = Month using LongDayNames (January)
* d = Day number no-leading zero (0)
* dd = Day number as 2 digits
* ddd = Day using ShortDayNames (Sun)
* dddd = Day using LongDayNames (Sunday)
* ddddd = Day in ShortDateFormat
* dddddd = Day in LongDateFormat

::: info
If you want to see characters such as dd in the formatted output, placing them in quote marks (") will stop them being interpreted as date or time elements.
:::

* c = Use ShortDateFormat + LongTimeFormat

* h = Hour number no-leading zero (0)

* hh = Hour number as 2 digits

* n = Minute number no-leading zero (0)

* nn = Minute number as 2 digits

* s = Second number no-leading zero (0)

* ss = Second number as 2 digits

* z = Millisecond number no-leading zero (0)

* zzz = Millisecond number as 3 digits

* t = Use ShortTimeFormat

* tt = Use LongTimeFormat

* am/pm = Use after h : gives 12 hours + am/pm

* a/p = Use after h : gives 12 hours + a/p

* ampm = As a/p but TimeAMString,TimePMString

* / = Substituted by DateSeparator value

* : = Substituted by TimeSeparator value

In addition to this formatting, various of the above options are affected by the following variables, with their default values -

* DateSeparator = /
* TimeSeparator = :
* ShortDateFormat = dd/mm/yyyy
* LongDateFormat = dd mmm yyyy
* TimeAMString = AM
* TimePMString = PM
* ShortTimeFormat = hh:mm
* LongTimeFormat = hh:mm:ss
* ShortMonthNames = Jan Feb ...
* LongMonthNames = January, February ...
* ShortDayNames = Sun, Mon ...
* LongDayNames = Sunday, Monday ...
* TwoDigitYearCenturyWindow = 50
