WXP Y2K Compliance Statement
for Version 5.0
March 11, 1999
There are three potential problems in using time in WXP. First is the use of the system clock and system routines/functions to derive current time. The second is interpreting 2 digit years in file names, labels, etc. The third is the date stored in incoming weather data.
WXP version 5 Date Setup
WXP version 5 was modified to use a single date/time model in order to unify the use and creation of date/time information. Previous versions of WXP use several methods of handling dates, which can result in some inconsistent results. WXP version 5 adopts the following practices:
if year < 50, add 2000
else if year < 200, add 1900 (this handles situation where some data files store year
as years from 1900)
else year is not changed.
This handles situations such as years from 1900 and use of century 20, year 100 for 2000 and century 21, year 1 for 2001.
Even though WXP keeps internal data structures with year, month, day, hour and minute, it uses integer seconds for all computations using time.
Y2K Testing
The Y2K testing and data below was done as part of the Northwest POC contract in March of 1998. In that work, the WXP ingestor, decoders and display programs were run for the following dates:
These tests were run on a Sun Solaris 2.6 workstation and in all three cases, WXP ran fine. Some of the documentation is provided below. Many of the same programs were run on Linux (Red Hat 5.1) and Windows 98 with the same results.
WXP Access to Weather Data (Y2K Problem)
The only thing WXP cannot control is what NWS or other might put in their data files. For example, NIDS, GRIB and NOAAPORT satellite data include encoded dates that could be impacted by the year 2000. WXP cannot control if the encoding of these times are incorrectly sent from NWS. To reduce the effect of this problem, WXP allows the data to be saved on arrival time rather than the time encoded in the data file itself. WXP will display the internal time to date/time labels on plots, products and images but the processing of the data is based more on arrival time.
NWS is providing software developers with test Y2K products and as those are available, WXP version 5 will be tested on those products.
Older Versions of WXP (Unix and DOS)
WXP versions 4.8.3 and earlier use 2 digit year in many applications. Even though there is code to convert all 2 digit years less than 50 to 2000+ years, this is not consistently done throughout WXP. In other words, WXP 4.8 might reference the year 200 correctly in some cases and not correctly in others. These versions are not Y2K compliant.
WXP Y2K Test Results
Test 1: Ingest on Dec 31, 1999-Jan 1 2000
The system clock was set to 23:45 and the WXP ingestor was run for 30 minutes to make sure output file times would correctly roll over to the year 2000. Again, the output dates are based on the output of the gmtime function. Here is the output from the ingestor as the date rolled over to the new year.SAIN32 VIDP 290430 **SAIN32 VIDP 290430 ** 99 DEC 31 23:59:09Z Append to: /usr/wxp/data/00010100_sao.wmo VIDP 09009KT 4500 HZ SCT040 SCT100 24/13 Q1013 NOSIG = VILK 08015ILT 3000 HZ SCT020 FEW030CB BKN100 23/17 Q1011 TEMPO TSRA= VIAR 05004KT 7000 FEW040 23/13 Q1013= VIBN NIL= NALD 981 TKNA 29112022 SAPA69 PHWR 291100 RTD **SAPA69 PHWR 291100 RTD** 99 DEC 31 23:59:46Z Append to: /usr/wxp/data/00010100_sao.wmo Append to: /usr/wxp/data/print/9912312357 PGSN 291055Z 05015KT 7SM SCT018 BKN060 OVC250 26/23 A3006 RMK SLP179= PGUM 291058Z 07010KT 7SM FEW025 FEW070 26/22 A3004 RMK SLP173 T02610217= PHNG 291114Z 07011G16KT 7SM SCT025 BKN050 23/18 A3023 RMK SLP232= RCBS 1100Z 03007KT 9999 SCT008 OVC021 19/16 Q1020 A3013 NOSIG= RCFG 1100Z 02014KT 9999 SCT012 OVC028 13/11 Q1023 A3021 NOSIG= NALD 982 TKNA 29112038 FTPA93 PHWR 291100 **FTPA93 PHWR 291100 ** 0 JAN 1 00:00:11Z Append to: /usr/wxp/data/00010100_term.wmo Append to: /usr/wxp/data/print/0001010000 WAAA 290600Z 1224 00000 8000 SCT018 TEMPO 1215 6000 RA FEW018CB BKN018 -------- MF.1761 TAF WAAA 290830Z 1212 00000 8000 SCT018 TEMPO 1215 6000 RA F FEW018CB BKN018 TEMPO 0002 VRB03KT BECMG 0204 33008 9999 SCT018 TEMPO 0609 6000 TSRA FEW018CB BKN018= YBAS 291049Z 291212 11008KT CAVOK= YBAS 291049Z 1212 11008KT CAVOK= YBBN 291031Z 291212 035006T 9999 3ST012 FM22 06010KT 9999 3CU030 FM11 35006KT 9999 3ST012 PROB30 1721 0900 FG PROB30 INTER 0612 3000 TS 3ST012 2CB050= YBBN 291031Z 1212 035006KT 9999 3ST012 FM22 06010KT 9999 3CU030 FM11 35006KT 9999 3ST012 PROB30 1721 0900 FG PROB30 INTER 0612 3000 TS 3ST012 2CB050= YBCS 291041Z 1212 VRB03KT 9999 1CU020 T 24 23 22 22 Q 1015 1014 1013 1014= YBCS 291041Z 1212 VRB03KT 9999 1CU020= YBRK 291037Z 291206 VRB03KT 9999 2ST015 FM00 07008KT 9999 2CU040=
Test 2: Listing of Data File
(poc) d:/usr/wxp/data (unisys-66) ls 00* 00010100_pirep.hdr 00010100_sfc.wmo 00010100_term.wmo 00031498.syn 00010100_pirep.wmo 00010100_sum.hdr 00010111_sao.wmo 00010100_sao.wmo 00010100_sum.wmo 00010111_term.hdr 00010100_sfc.hdr 00010100_term.hdr 00010111_term.wmo
Test 3: Decode Surface Data
(poc) b:/usr/wxp/src (unisys-68) sacvt -cu SURFACE METAR/SA DATA CONVERSION PROGRAM (Ver 5.0-Solaris-X11) Current filename: /usr/wxp/data/00010111_sao.wmo Creating output file: /usr/wxp/convert/00010111_sao.wxp DATE: 1100Z 1 JAN 00 Converting data... Processing file: /usr/wxp/data/00010111_sao.wmo
Test 4: Display Surface Data
(poc) b:/usr/wxp/src (unisys-69) pg /usr/wxp/convert/00010111_sao.wxp WXPSFC 1100Z 1 JAN 00 RJCC 410 374 1618 989 -99 4.35 5F,8B,80B - @1100 #1ST005 5ST008 7AC080 A2989 $ RJNN 662 392 0002 15 -99 -99 30F,-99B - @1100 #1CU030 A3018 $ RJTT 626 500 1915 9 -99 10.0 -99C - @1100 #A3009 $ RJFK 572 500 2905 24 -99 -99 35F,100B - @1100 #1CU035 7AC100 A3025 $
Test 5: Plotting Surface Data
(poc) b:/usr/wxp/src (unisys-74) sfcwx -cu -re=japan -de=d -va=all SURFACE DATA PLOTTING (Ver 5.0-Solaris-X11) Current filename: /usr/wxp/convert/00010111_sao.wxp Reading the city database file... Date: 1100Z 1 JAN 00
Test 6: Filename Generation
This is a test of WXP's ability to create filenames over a range of hours and use it in plots of data. This test is to make sure both the years 1999 and 2000 can be represented in a program/plot needing a range of date/times. The first test uses "wxpfile" to generate a list of filenames surrounding the new year. The file name convention uses 2 digit year with month, day and hour.
(poc) b:/usr/wxp/src (unisys-75) wxpfile -cu -nh=-24 -if=sfc_cvt /usr/wxp/convert/99123111_sao.wxp /usr/wxp/convert/99123112_sao.wxp /usr/wxp/convert/99123113_sao.wxp /usr/wxp/convert/99123114_sao.wxp /usr/wxp/convert/99123115_sao.wxp /usr/wxp/convert/99123116_sao.wxp /usr/wxp/convert/99123117_sao.wxp /usr/wxp/convert/99123118_sao.wxp /usr/wxp/convert/99123119_sao.wxp /usr/wxp/convert/99123120_sao.wxp /usr/wxp/convert/99123121_sao.wxp /usr/wxp/convert/99123122_sao.wxp /usr/wxp/convert/99123123_sao.wxp /usr/wxp/convert/00010100_sao.wxp /usr/wxp/convert/00010101_sao.wxp /usr/wxp/convert/00010102_sao.wxp /usr/wxp/convert/00010103_sao.wxp /usr/wxp/convert/00010104_sao.wxp /usr/wxp/convert/00010105_sao.wxp /usr/wxp/convert/00010106_sao.wxp /usr/wxp/convert/00010107_sao.wxp /usr/wxp/convert/00010108_sao.wxp /usr/wxp/convert/00010109_sao.wxp /usr/wxp/convert/00010110_sao.wxp /usr/wxp/convert/00010111_sao.wxp
The next test outputs a date/time label from "wxpfile". This uses the same function as all other WXP programs:
(poc) b:/usr/wxp/src (unisys-76) wxpfile -cu -nh=-24 -if=sfc_cvt -ou=date 11Z 31 DEC 99 12Z 31 DEC 99 13Z 31 DEC 99 14Z 31 DEC 99 15Z 31 DEC 99 16Z 31 DEC 99 17Z 31 DEC 99 18Z 31 DEC 99 19Z 31 DEC 99 20Z 31 DEC 99 21Z 31 DEC 99 22Z 31 DEC 99 23Z 31 DEC 99 00Z 1 JAN 00 01Z 1 JAN 00 02Z 1 JAN 00 03Z 1 JAN 00 04Z 1 JAN 00 05Z 1 JAN 00 06Z 1 JAN 00 07Z 1 JAN 00 08Z 1 JAN 00 09Z 1 JAN 00 10Z 1 JAN 00 11Z 1 JAN 00
This test is for forecast time determination with initial time in 1999 and valid 2000
(poc) b:/usr/wxp/src (unisys-77) wxpfile 99123112 -if=grib_eta -ft=h24 -ou=label -mo=eta 24 hour ETA valid 12Z SAT 1 JAN 00
This test is sequence number output. A sequence number is in the format "YYYYmmddhhnn" to test that 4 digit year does come out 2000 and not 1900.
(poc) b:/usr/wxp/src (unisys-78) wxpfile -cu -nh=-24 -if=sfc_cvt -ou=date -ou=seq 199912311100 199912311200 199912311300 199912311400 199912311500 199912311600 199912311700 199912311800 199912311900 199912312000 199912312100 199912312200 199912312300 200001010000 200001010100 200001010200 200001010300 200001010400 200001010500 200001010600 200001010700 200001010800 200001010900 200001011000 200001011100
Test 7: Date Output from Various Programs
This tests to make sure various types of date output is correctly generated by WXP:
(poc) b:/usr/wxp/src (unisys-79) date Sat Jan 1 11:05:28 GMT 2000
(poc) b:/usr/wxp/src (unisys-80) date +%D 01/01/00
(poc) b:/usr/wxp/src (unisys-81) date +%y%m%d%H.%M 00010111.05
(poc) b:/usr/wxp/src (unisys-84) wxpfile -cu -if=sfc_cvt 00010111 /usr/wxp/convert/00010111_sao.wxp
(poc) b:/usr/wxp/src (unisys-85) wxpfile -cu -if=sfc_cvt 00010111 -ou=date 11Z 1 JAN 00
(poc) b:/usr/wxp/src (unisys-86) wxpfile -cu -if=sfc_cvt 00010111 -ou=date -ou=seq 200001011100
Test 8: 2000 Leap Year Test
The test is to set the time to 23:45 on Feb 28, 2000 and see if it rolls over to Feb 29 (since 2000 is a leap year) and to make sure WXP can resolve the leap year correctly.
(poc) b:/usr/wxp/src (unisys-90) wxpfile -cu -if=sfc_cvt /usr/wxp/convert/00022900_sao.wxp
(poc) b:/usr/wxp/src (unisys-93) wxpfile 00022901 -if=sfc_dat /usr/wxp/data/00022901_sao.wmo
(poc) b:/usr/wxp/src (unisys-94) wxpfile 00022901 -if=sfc_dat -nh=-24 /usr/wxp/data/00022801_sao.wmo /usr/wxp/data/00022802_sao.wmo /usr/wxp/data/00022803_sao.wmo /usr/wxp/data/00022804_sao.wmo /usr/wxp/data/00022805_sao.wmo /usr/wxp/data/00022806_sao.wmo /usr/wxp/data/00022807_sao.wmo /usr/wxp/data/00022808_sao.wmo /usr/wxp/data/00022809_sao.wmo /usr/wxp/data/00022810_sao.wmo /usr/wxp/data/00022811_sao.wmo /usr/wxp/data/00022812_sao.wmo /usr/wxp/data/00022813_sao.wmo /usr/wxp/data/00022814_sao.wmo /usr/wxp/data/00022815_sao.wmo /usr/wxp/data/00022816_sao.wmo /usr/wxp/data/00022817_sao.wmo /usr/wxp/data/00022818_sao.wmo /usr/wxp/data/00022819_sao.wmo /usr/wxp/data/00022820_sao.wmo /usr/wxp/data/00022821_sao.wmo /usr/wxp/data/00022822_sao.wmo /usr/wxp/data/00022823_sao.wmo /usr/wxp/data/00022900_sao.wmo /usr/wxp/data/00022901_sao.wmo
(poc) b:/usr/wxp/src (unisys-94) wxpfile 00030112 -if=sfc_cvt -nh=-24 /usr/wxp/convert/00022912_sao.wxp /usr/wxp/convert/00022913_sao.wxp /usr/wxp/convert/00022914_sao.wxp /usr/wxp/convert/00022915_sao.wxp /usr/wxp/convert/00022916_sao.wxp /usr/wxp/convert/00022917_sao.wxp /usr/wxp/convert/00022918_sao.wxp /usr/wxp/convert/00022919_sao.wxp /usr/wxp/convert/00022920_sao.wxp /usr/wxp/convert/00022921_sao.wxp /usr/wxp/convert/00022922_sao.wxp /usr/wxp/convert/00022923_sao.wxp /usr/wxp/convert/00030100_sao.wxp /usr/wxp/convert/00030101_sao.wxp /usr/wxp/convert/00030102_sao.wxp /usr/wxp/convert/00030103_sao.wxp /usr/wxp/convert/00030104_sao.wxp /usr/wxp/convert/00030105_sao.wxp /usr/wxp/convert/00030106_sao.wxp /usr/wxp/convert/00030107_sao.wxp /usr/wxp/convert/00030108_sao.wxp /usr/wxp/convert/00030109_sao.wxp /usr/wxp/convert/00030110_sao.wxp /usr/wxp/convert/00030111_sao.wxp /usr/wxp/convert/00030112_sao.wxp
Test 9: 2001 Year Rollover Test
This is a test to make sure the rollover to the year 2001, works properly. The clock on the computer was reset to 23:45 Dec 31, 2000 and the ingestor run for 30 minutes. Here is some of the output:
NALD 965 TKNA 29111637 UAXX1 PHWR 291116 **UAXX1 PHWR 291116 ** 0 DEC 31 23:59:35Z Append to: /usr/wxp/data/00123123_pirep.wmo Append to: /usr/wxp/data/print/0012312357 KAL016 4327N 12640W 1030 F310 M49 200 ////// = NWA932 2230N 15134W 1032 F340 M39 280/083 TB 0= NALD 966 TKNA 29111728 SADN31 KWBC 291050 RRB **SADN31 KWBC 291050 RRB** 1 JAN 1 00:00:24Z Append to: /usr/wxp/data/01010100_sao.wmo METAR EKAH 291111Z 12006KT 090V150 7000 BKN035 BKN120 09/07 Q1019= NALD 967 TKNA 29111729 SAEM31 KWBC 291100 RRB **SAEM31 KWBC 291100 RRB** 1 JAN 1 00:00:24Z Append to: /usr/wxp/data/01010100_sao.wmo METAR LDDU 291100Z 01009G20KT 260V050 CAVOK 17/M01 Q1016= LDPL 291100Z 09008KT CAVOK 18/M00 Q1017 NOSIG= LDRI 291100Z 27005KT CAVOK 19/00 Q1017= LDZA 291100Z 07004KT 330V170 CAVOK 14/02 Q1020 NOSIG= LDZD 291100Z 36002KT CAVOK 20/06 Q1017 NOSIG= LJLJ 17004KT 070V020 9999 FEW055 14/02 Q1018 NOSIG= LJMB 12004KT 010V340 9999 FEW046 SCT054 13/04 Q1020= LJPZ 32007KT CAVOK 17/02 Q1017= LOAV 291100Z 00000KT 4000 BR FEW015CU BKN030CU Q1020 BKN= LOWZ 291100Z 00000KT 50KM FEW120AC BKNCI 15/05 Q1015 SCT= LQSA 291100Z 22006KT 9999 SCT050 SCT250 13/02 Q1021= LYBE 02009KT 210V140 9999 SCT033 11/01 Q1021 NOSIG= LYNI 31020KT 270V330 9999 SCT040 12/06 Q1018 NOSIG= LYPG 34014KT 9999 FEW050 BKN200 17/M04 Q1016 NOSIG= LYPR 03014KT 9999 SCT050 10/M06 Q1016 NOSIG= LYTV 31006KT CAVOK 17/04 Q1016= NALD 968 TKNA 29111736 SAEN31 KWBC 291050 RRC **SAEN31 KWBC 291050 RRC** 1 JAN 1 00:00:33Z Append to: /usr/wxp/data/01010100_sao.wmo METAR EFHK 20005KT 110V260 8000 FEW024 OVC043 04/M00 Q1023 NOSIG 22150045= NALD 969 TKNA 29111737
Test 10: Date Output for 2001
Here are some results from tests on the 2001 test. This is to make sure
(poc) b:/usr/wxp/src (unisys-99) wxpfile 01010112 -if=sfc_cvt -nh=-24 /usr/wxp/convert/00123112_sao.wxp /usr/wxp/convert/00123113_sao.wxp /usr/wxp/convert/00123114_sao.wxp /usr/wxp/convert/00123115_sao.wxp /usr/wxp/convert/00123116_sao.wxp /usr/wxp/convert/00123117_sao.wxp /usr/wxp/convert/00123118_sao.wxp /usr/wxp/convert/00123119_sao.wxp /usr/wxp/convert/00123120_sao.wxp /usr/wxp/convert/00123121_sao.wxp /usr/wxp/convert/00123122_sao.wxp /usr/wxp/convert/00123123_sao.wxp /usr/wxp/convert/01010100_sao.wxp /usr/wxp/convert/01010101_sao.wxp /usr/wxp/convert/01010102_sao.wxp /usr/wxp/convert/01010103_sao.wxp /usr/wxp/convert/01010104_sao.wxp /usr/wxp/convert/01010105_sao.wxp /usr/wxp/convert/01010106_sao.wxp /usr/wxp/convert/01010107_sao.wxp /usr/wxp/convert/01010108_sao.wxp /usr/wxp/convert/01010109_sao.wxp /usr/wxp/convert/01010110_sao.wxp /usr/wxp/convert/01010111_sao.wxp /usr/wxp/convert/01010112_sao.wxp
(poc) b:/usr/wxp/src (unisys-101) wxpfile 01010112 -if=sfc_cvt -nh=-24 -ou=seq 200012311200 200012311300 200012311400 200012311500 200012311600 200012311700 200012311800 200012311900 200012312000 200012312100 200012312200 200012312300 200101010000 200101010100 200101010200 200101010300 200101010400 200101010500 200101010600 200101010700 200101010800 200101010900 200101011000 200101011100 200101011200