Максимальная длина имени "tzname" /имя часового пояса

Я пытаюсь найти максимальную длину идентификатора часового пояса. Это строка, используемая как имя часового пояса (например, "Америка/Нью-Йорк" ). База данных tz не помогает; Я не смог найти детали реализации.

Microsoft (.NET Framework 4.5) предлагает максимальную длину 32, но это, по-видимому, является ограничением их реестра.

libc указывает на ограничение, называемое "_POSIX_TZNAME_MAX" длиной 3 символа, но это абсолютное минимальное требование для соответствия POSIX. Как правило, я предполагаю, что реализация будет использовать больше.

Итак, реальный вопрос: какая допустимая длина строки для безопасного хранения часового пояса "имя tzname" /имя идентификатора?

Ответ 1

Почему бы не использовать контейнер, который не заботится о том, какая длина - как, например. std::string?

Теперь так получилось, что я недавно работал с TZ db, как указано в общем формате csv (например, здесь в файле из CERN), но тот же формат также используется в источниках Boost.

С этими данными я вижу максимальную длину 28:

R> library(RcppBDT)                      # R package interfacing Boost Date_Time
Loading required package: Rcpp
R> tz <- new(bdtTz, "America/Chicago")   # init. an object, using my default TZ
R> tznames <- tz$getAllRegions()         # retrieve list of all TZ names
R>
R> length(tznames)                       # total number of TZ identifiers
[1] 381
R>
R> head(tznames)                         # look at first six
[1] "Africa/Abidjan"     "Africa/Accra"       "Africa/Addis_Ababa" 
[4] "Africa/Algiers"     "Africa/Asmera"      "Africa/Bamako"     
R>
R> summary(sapply(tznames, nchar))       # numerical summary of length of each
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
      9      13      15      15      17      28 
R>
R> tznames[ nchar(tznames) >= 26 ]       # looking at length 26 and above
[1] "America/Indiana/Indianapolis" "America/Kentucky/Louisville"  
[3] "America/Kentucky/Monticello"  "America/North_Dakota/Center" 
R> 

Мы также можем посмотреть на гистограмму:

R> library(MASS)
R> truehist(sapply(tznames, nchar), 
+           main="Distribution of TZ identifier length", col="darkgrey")
R>

enter image description here

Это использует код, который у меня есть в пакете RcppBDT SVN repo на R-Forge, но еще не включен в версия CRAN пакета.