Using Swift 4, is there a way to get a string representation of a locale's date format? Based on an iPhone's locale settings, I would like to find out if the format is yyyy/mm/dd or mm/dd/yyyy.
I've found all of the ways for changing a date format or getting the date from the locale's format but have not been able to work out how to get the actual format.
Use DateFormatter dateFormat(fromTemplate:options:locale:)
.
let userFormat = DateFormatter.dateFormat(fromTemplate: "yyyyMMdd", options: 0, locale: Locale.current)
In the US this returns MM/dd/yyyy
. In Germany this gives dd.MM.yyyy
.
If you ever need to get the appropriate time format which also takes into account the user's chosen 12/24-hour time format, use a template of jms
. The j
is a special format specifier, only used with templates, that returns either h
or H
for the hour depending on what's appropriate.
Another possible option is to create a DateFormatter
, set the desired dateStyle
and timeStyle
, then read the dateFormat
property:
var mydf = DateFormatter()
mydf.dateStyle = .long // set as desired
mydf.timeStyle = .full // set as desired
print(mydf.dateFormat)
For the US this gives:
MMMM d, y 'at' h:mm:ss a zzzz
For Germany this gives:
d. MMMM y 'um' HH:mm:ss zzzz