21

タイムゾーン識別子の最大長を見つけようとしています。これは、タイムゾーン名として使用される文字列です(例: "America / New_York")。tzデータベースは役に立ちません。実装の詳細が見つかりませんでした。

Microsoft(.NET Framework 4.5)は最大長32を提案していますが、これはレジストリの制限のようです。

libcは「_POSIX_TZNAME_MAX」と呼ばれる制限を指します。これは3文字の長さですが、これはPOSIX準拠の絶対的な最小要件です。通常、実装はより多くを使用すると思います。

したがって、本当の問題は、タイムゾーン「tzname」/識別子名を安全に保存するための許容可能な文字列の長さはどれくらいかということです。

4

1 に答える 1

29

長さを気にしないコンテナを使ってみませんstd::stringか?

さて、私は最近、一般的なcsv形式(たとえば、ここではBoostのファイル)で提供されているTZ dbを使用していましたが、同じ形式が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>

ここに画像の説明を入力してください

これは、R-ForgeのRcppBDTパッケージのSVNリポジトリにあるが、パッケージのCRANバージョンにはまだないコードを使用します。

于 2012-09-22T18:01:29.557 に答える