* NEWS: Mention this. * tzselect.ksh (check_POSIX_TZ_string): Support the extended offset range of POSIX.1-2024, so that users can enter a proleptic TZ setting like "IST-2IDT,M3.4.4/26,M10.5.0". --- NEWS | 7 ++++--- tzselect.ksh | 13 +++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/NEWS b/NEWS index 8f362cb9..6a2c7398 100644 --- a/NEWS +++ b/NEWS @@ -64,9 +64,10 @@ Unreleased, experimental changes The SUPPORT_C89 option now defaults to 1 instead of 0, fixing a POSIX-conformance bug introduced in 2023a. - tzselect now assumes POSIX.2-1992 or later, as practical porting - targets now all support this. Also, tzselect uses some features - from POSIX.1-2024 if available. + tzselect now supports POSIX.1-2024 proleptic TZ strings. Also, it + assumes POSIX.2-1992 or later, as practical porting targets now + all support that, and it uses some features from POSIX.1-2024 if + available. Changes to build procedure diff --git a/tzselect.ksh b/tzselect.ksh index 48159afd..ca3d82c6 100644 --- a/tzselect.ksh +++ b/tzselect.ksh @@ -425,7 +425,7 @@ while eval ' doselect '"$quoted_continents"' \ "coord - I want to use geographical coordinates." \ - "TZ - I want to specify the timezone using a POSIX.1-2017 TZ string." \ + "TZ - I want to specify the timezone using a proleptic TZ string." \ "time - I know local time already." \ "now - Like \"time\", but configure only for timestamps from now on." continent=$select_result @@ -449,16 +449,17 @@ while case $continent in TZ) - # Ask the user for a POSIX.1-2017 TZ string. Check that it conforms. + # Ask the user for a proleptic TZ string. Check that it conforms. check_POSIX_TZ_string=' BEGIN { tz = substr(ARGV[1], 2) ARGV[1] = "" tzname = ("(<[[:alnum:]+-][[:alnum:]+-][[:alnum:]+-]+>" \ "|[[:alpha:]][[:alpha:]][[:alpha:]]+)") - time = ("(2[0-4]|[0-1]?[0-9])" \ - "(:[0-5][0-9](:[0-5][0-9])?)?") - offset = "[-+]?" time + sign = "[-+]?" + hhmm = "(:[0-5][0-9](:[0-5][0-9])?)?" + offset = sign "(2[0-4]|[0-1]?[0-9])" hhmm + time = sign "(16[0-7]|(1[0-5]|[0-9]?)[0-9])" hhmm mdate = "M([1-9]|1[0-2])\\.[1-5]\\.[0-6]" jdate = ("((J[1-9]|[0-9]|J?[1-9][0-9]" \ "|J?[1-2][0-9][0-9])|J?3[0-5][0-9]|J?36[0-5])") @@ -479,7 +480,7 @@ while read tz $AWK "$check_POSIX_TZ_string" ="$tz" do - say >&2 "'$tz' is not a conforming POSIX.1-2017 timezone string." + say >&2 "'$tz' is not a conforming POSIX proleptic TZ string." done TZ_for_date=$tz;; *) -- 2.43.0