Unix-将GMT时间字段转换为PST时间 [英] Unix - Convert GMT time field to PST time

查看:57
本文介绍了Unix-将GMT时间字段转换为PST时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对不起,是否曾经有人问过

Sorry if this has been asked before.

我有一个文本文件,其中包含一个在Unix上带有GMT时间的字段.我想将该字段转换为相同格式的PST时区.

I have a text file that contain a field with GMT time on Unix. I want to convert that field to the PST time zone in the same format.

源文件test.txt

source file test.txt

20200804T221806.214 GMT,2003060015,2003060018
20200804T232027.571 GMT,2005260045,2005260095
20200804T232027.572 GMT,2005260045,2005260095
20200805T000119.715 GMT,2005290022C,2005290042D
20200805T000119.715 GMT,2005290022C,2005290042D
20200801T000326.111 GMT,2005290028C,2005290050D
20200101T000326.111 GMT,2005290028C,2005290050D
20000101T000326.111 GMT,2005290028C,2005290050D

所需结果

20200804T151806.214 PST,2003060015,2003060018
20200804T162027.571 PST,2005260045,2005260095
20200804T162027.572 PST,2005260045,2005260095
20200804T000119.715 PST,2005290022C,2005290042D
20200804T000119.715 PST,2005290022C,2005290042D
20200731T000326.111 PST,2005290028C,2005290050D
20191231T000326.111 PST,2005290028C,2005290050D
19991231T000326.111 PST,2005290028C,2005290050D

这是我当前的awk代码,并得到了结果.但是,仅当所有月份都具有相同的31天时,此解决方案才有效.我觉得应该为此提供一个更简单的解决方案,而不必使用awk.

This is my current awk code and got the result. However, this solution only works if all months have the same 31 days. I feel like there should be a much simpler solution for this and not necessary to use awk.

awk -F ',' '{ sCCYY = substr($1,1,4); sMM = substr($1,5,2); sDD = substr($1,7,2); stime = substr($1,10,6) - 70000; if (stime < 0) { sDD = sDD - 1; stime = substr($1,10,6); if (sDD <= 0) { sMM = sMM - 1; sDD = 31; if (sMM <= 0) { sCCYY = sCCYY - 1; sMM = 12; } } } printf"%04s%02s%02s%06s%s%s%s\n",sCCYY,sMM,sDD,"T" stime,substr($1,16,4) " PST,",$2 ",",$3; }' test.txt

结果:

20200804T151806.214 PST,2003060015,2003060018
20200804T162027.571 PST,2005260045,2005260095
20200804T162027.572 PST,2005260045,2005260095
20200804T000119.715 PST,2005290022C,2005290042D
20200804T000119.715 PST,2005290022C,2005290042D
20200731T000326.111 PST,2005290028C,2005290050D
20191231T000326.111 PST,2005290028C,2005290050D
19991231T000326.111 PST,2005290028C,2005290050D

如果您知道更好的转换方法,请分享.预先感谢!

Please share if you know a better way to convert it. Thanks in advance!

推荐答案

如果您有用于时间函数的GNU awk,则:

If you have GNU awk for time functions then:

$ cat tst.awk
BEGIN { FS=OFS="," }
{
    match($1,/(.{4})(.{2})(.{2})T(.{2})(.{2})(.{2})\.(.{3})/,a)
    secs = mktime(a[1]" "a[2]" "a[3]" "a[4]" "a[5]" "a[6], 1)
    $1 = strftime("%FT%T."a[7]" %Z", secs)
    print
}

.

$ TZ='US/Pacific' awk -f tst.awk file
20200804T151806.214 PDT,2003060015,2003060018
20200804T162027.571 PDT,2005260045,2005260095
20200804T162027.572 PDT,2005260045,2005260095
20200804T170119.715 PDT,2005290022C,2005290042D
20200804T170119.715 PDT,2005290022C,2005290042D
20200731T170326.111 PDT,2005290028C,2005290050D
20191231T160326.111 PST,2005290028C,2005290050D
19991231T160326.111 PST,2005290028C,2005290050D

如果该TZ值对您不起作用,则可能有一个有效.FWIW这是我的Mac上的列表:

If that TZ values doesn't work for you there's probably one that does. FWIW here's the list on my Mac:

$ sudo systemsetup -listtimezones
Time Zones:
 Africa/Abidjan
 Africa/Accra
 Africa/Addis_Ababa
 Africa/Algiers
 Africa/Asmara
 Africa/Bamako
 Africa/Bangui
 Africa/Banjul
 Africa/Bissau
 Africa/Blantyre
 Africa/Brazzaville
 Africa/Bujumbura
 Africa/Cairo
 Africa/Casablanca
 Africa/Ceuta
 Africa/Conakry
 Africa/Dakar
 Africa/Dar_es_Salaam
 Africa/Djibouti
 Africa/Douala
 Africa/El_Aaiun
 Africa/Freetown
 Africa/Gaborone
 Africa/Harare
 Africa/Johannesburg
 Africa/Juba
 Africa/Kampala
 Africa/Khartoum
 Africa/Kigali
 Africa/Kinshasa
 Africa/Lagos
 Africa/Libreville
 Africa/Lome
 Africa/Luanda
 Africa/Lubumbashi
 Africa/Lusaka
 Africa/Malabo
 Africa/Maputo
 Africa/Maseru
 Africa/Mbabane
 Africa/Mogadishu
 Africa/Monrovia
 Africa/Nairobi
 Africa/Ndjamena
 Africa/Niamey
 Africa/Nouakchott
 Africa/Ouagadougou
 Africa/Porto-Novo
 Africa/Sao_Tome
 Africa/Tripoli
 Africa/Tunis
 Africa/Windhoek
 America/Adak
 America/Anchorage
 America/Anguilla
 America/Antigua
 America/Araguaina
 America/Argentina/Buenos_Aires
 America/Argentina/Catamarca
 America/Argentina/Cordoba
 America/Argentina/Jujuy
 America/Argentina/La_Rioja
 America/Argentina/Mendoza
 America/Argentina/Rio_Gallegos
 America/Argentina/Salta
 America/Argentina/San_Juan
 America/Argentina/San_Luis
 America/Argentina/Tucuman
 America/Argentina/Ushuaia
 America/Aruba
 America/Asuncion
 America/Atikokan
 America/Bahia
 America/Bahia_Banderas
 America/Barbados
 America/Belem
 America/Belize
 America/Blanc-Sablon
 America/Boa_Vista
 America/Bogota
 America/Boise
 America/Cambridge_Bay
 America/Campo_Grande
 America/Cancun
 America/Caracas
 America/Cayenne
 America/Cayman
 America/Chicago
 America/Chihuahua
 America/Costa_Rica
 America/Creston
 America/Cuiaba
 America/Curacao
 America/Danmarkshavn
 America/Dawson
 America/Dawson_Creek
 America/Denver
 America/Detroit
 America/Dominica
 America/Edmonton
 America/Eirunepe
 America/El_Salvador
 America/Fort_Nelson
 America/Fortaleza
 America/Glace_Bay
 America/Godthab
 America/Goose_Bay
 America/Grand_Turk
 America/Grenada
 America/Guadeloupe
 America/Guatemala
 America/Guayaquil
 America/Guyana
 America/Halifax
 America/Havana
 America/Hermosillo
 America/Indiana/Indianapolis
 America/Indiana/Knox
 America/Indiana/Marengo
 America/Indiana/Petersburg
 America/Indiana/Tell_City
 America/Indiana/Vevay
 America/Indiana/Vincennes
 America/Indiana/Winamac
 America/Inuvik
 America/Iqaluit
 America/Jamaica
 America/Juneau
 America/Kentucky/Louisville
 America/Kentucky/Monticello
 America/Kralendijk
 America/La_Paz
 America/Lima
 America/Los_Angeles
 America/Lower_Princes
 America/Maceio
 America/Managua
 America/Manaus
 America/Marigot
 America/Martinique
 America/Matamoros
 America/Mazatlan
 America/Menominee
 America/Merida
 America/Metlakatla
 America/Mexico_City
 America/Miquelon
 America/Moncton
 America/Monterrey
 America/Montevideo
 America/Montreal
 America/Montserrat
 America/Nassau
 America/New_York
 America/Nipigon
 America/Nome
 America/Noronha
 America/North_Dakota/Beulah
 America/North_Dakota/Center
 America/North_Dakota/New_Salem
 America/Nuuk
 America/Ojinaga
 America/Panama
 America/Pangnirtung
 America/Paramaribo
 America/Phoenix
 America/Port-au-Prince
 America/Port_of_Spain
 America/Porto_Velho
 America/Puerto_Rico
 America/Punta_Arenas
 America/Rainy_River
 America/Rankin_Inlet
 America/Recife
 America/Regina
 America/Resolute
 America/Rio_Branco
 America/Santa_Isabel
 America/Santarem
 America/Santiago
 America/Santo_Domingo
 America/Sao_Paulo
 America/Scoresbysund
 America/Shiprock
 America/Sitka
 America/St_Barthelemy
 America/St_Johns
 America/St_Kitts
 America/St_Lucia
 America/St_Thomas
 America/St_Vincent
 America/Swift_Current
 America/Tegucigalpa
 America/Thule
 America/Thunder_Bay
 America/Tijuana
 America/Toronto
 America/Tortola
 America/Vancouver
 America/Whitehorse
 America/Winnipeg
 America/Yakutat
 America/Yellowknife
 Antarctica/Casey
 Antarctica/Davis
 Antarctica/DumontDUrville
 Antarctica/Macquarie
 Antarctica/Mawson
 Antarctica/McMurdo
 Antarctica/Palmer
 Antarctica/Rothera
 Antarctica/South_Pole
 Antarctica/Syowa
 Antarctica/Troll
 Antarctica/Vostok
 Arctic/Longyearbyen
 Asia/Aden
 Asia/Almaty
 Asia/Amman
 Asia/Anadyr
 Asia/Aqtau
 Asia/Aqtobe
 Asia/Ashgabat
 Asia/Atyrau
 Asia/Baghdad
 Asia/Bahrain
 Asia/Baku
 Asia/Bangkok
 Asia/Barnaul
 Asia/Beirut
 Asia/Bishkek
 Asia/Brunei
 Asia/Calcutta
 Asia/Chita
 Asia/Choibalsan
 Asia/Chongqing
 Asia/Colombo
 Asia/Damascus
 Asia/Dhaka
 Asia/Dili
 Asia/Dubai
 Asia/Dushanbe
 Asia/Famagusta
 Asia/Gaza
 Asia/Harbin
 Asia/Hebron
 Asia/Ho_Chi_Minh
 Asia/Hong_Kong
 Asia/Hovd
 Asia/Irkutsk
 Asia/Jakarta
 Asia/Jayapura
 Asia/Jerusalem
 Asia/Kabul
 Asia/Kamchatka
 Asia/Karachi
 Asia/Kashgar
 Asia/Kathmandu
 Asia/Katmandu
 Asia/Khandyga
 Asia/Krasnoyarsk
 Asia/Kuala_Lumpur
 Asia/Kuching
 Asia/Kuwait
 Asia/Macau
 Asia/Magadan
 Asia/Makassar
 Asia/Manila
 Asia/Muscat
 Asia/Nicosia
 Asia/Novokuznetsk
 Asia/Novosibirsk
 Asia/Omsk
 Asia/Oral
 Asia/Phnom_Penh
 Asia/Pontianak
 Asia/Pyongyang
 Asia/Qatar
 Asia/Qostanay
 Asia/Qyzylorda
 Asia/Rangoon
 Asia/Riyadh
 Asia/Sakhalin
 Asia/Samarkand
 Asia/Seoul
 Asia/Shanghai
 Asia/Singapore
 Asia/Srednekolymsk
 Asia/Taipei
 Asia/Tashkent
 Asia/Tbilisi
 Asia/Tehran
 Asia/Thimphu
 Asia/Tokyo
 Asia/Tomsk
 Asia/Ulaanbaatar
 Asia/Urumqi
 Asia/Ust-Nera
 Asia/Vientiane
 Asia/Vladivostok
 Asia/Yakutsk
 Asia/Yangon
 Asia/Yekaterinburg
 Asia/Yerevan
 Atlantic/Azores
 Atlantic/Bermuda
 Atlantic/Canary
 Atlantic/Cape_Verde
 Atlantic/Faroe
 Atlantic/Madeira
 Atlantic/Reykjavik
 Atlantic/South_Georgia
 Atlantic/St_Helena
 Atlantic/Stanley
 Australia/Adelaide
 Australia/Brisbane
 Australia/Broken_Hill
 Australia/Currie
 Australia/Darwin
 Australia/Eucla
 Australia/Hobart
 Australia/Lindeman
 Australia/Lord_Howe
 Australia/Melbourne
 Australia/Perth
 Australia/Sydney
 Europe/Amsterdam
 Europe/Andorra
 Europe/Astrakhan
 Europe/Athens
 Europe/Belgrade
 Europe/Berlin
 Europe/Bratislava
 Europe/Brussels
 Europe/Bucharest
 Europe/Budapest
 Europe/Busingen
 Europe/Chisinau
 Europe/Copenhagen
 Europe/Dublin
 Europe/Gibraltar
 Europe/Guernsey
 Europe/Helsinki
 Europe/Isle_of_Man
 Europe/Istanbul
 Europe/Jersey
 Europe/Kaliningrad
 Europe/Kiev
 Europe/Kirov
 Europe/Lisbon
 Europe/Ljubljana
 Europe/London
 Europe/Luxembourg
 Europe/Madrid
 Europe/Malta
 Europe/Mariehamn
 Europe/Minsk
 Europe/Monaco
 Europe/Moscow
 Europe/Oslo
 Europe/Paris
 Europe/Podgorica
 Europe/Prague
 Europe/Riga
 Europe/Rome
 Europe/Samara
 Europe/San_Marino
 Europe/Sarajevo
 Europe/Saratov
 Europe/Simferopol
 Europe/Skopje
 Europe/Sofia
 Europe/Stockholm
 Europe/Tallinn
 Europe/Tirane
 Europe/Ulyanovsk
 Europe/Uzhgorod
 Europe/Vaduz
 Europe/Vatican
 Europe/Vienna
 Europe/Vilnius
 Europe/Volgograd
 Europe/Warsaw
 Europe/Zagreb
 Europe/Zaporozhye
 Europe/Zurich
 GMT
 Indian/Antananarivo
 Indian/Chagos
 Indian/Christmas
 Indian/Cocos
 Indian/Comoro
 Indian/Kerguelen
 Indian/Mahe
 Indian/Maldives
 Indian/Mauritius
 Indian/Mayotte
 Indian/Reunion
 Pacific/Apia
 Pacific/Auckland
 Pacific/Bougainville
 Pacific/Chatham
 Pacific/Chuuk
 Pacific/Easter
 Pacific/Efate
 Pacific/Enderbury
 Pacific/Fakaofo
 Pacific/Fiji
 Pacific/Funafuti
 Pacific/Galapagos
 Pacific/Gambier
 Pacific/Guadalcanal
 Pacific/Guam
 Pacific/Honolulu
 Pacific/Johnston
 Pacific/Kiritimati
 Pacific/Kosrae
 Pacific/Kwajalein
 Pacific/Majuro
 Pacific/Marquesas
 Pacific/Midway
 Pacific/Nauru
 Pacific/Niue
 Pacific/Norfolk
 Pacific/Noumea
 Pacific/Pago_Pago
 Pacific/Palau
 Pacific/Pitcairn
 Pacific/Pohnpei
 Pacific/Ponape
 Pacific/Port_Moresby
 Pacific/Rarotonga
 Pacific/Saipan
 Pacific/Tahiti
 Pacific/Tarawa
 Pacific/Tongatapu
 Pacific/Truk
 Pacific/Wake
 Pacific/Wallis

另请参见:

$ ls -LF /usr/share/zoneinfo
+VERSION     Asia/   CST6CDT  EST      Europe/  GMT+0      Hongkong  Jamaica    MST      Navajo    Portugal   UCT        WET      zone.tab
Africa/      Atlantic/   Canada/  EST5EDT  Factory  GMT-0      Iceland   Japan      MST7MDT  PRC       ROC    US/        Zulu
America/     Australia/  Chile/   Egypt    GB       GMT0       Indian/   Kwajalein  Mexico/  PST8PDT   ROK    UTC        iso3166.tab
Antarctica/  Brazil/     Cuba     Eire     GB-Eire  Greenwich  Iran  Libya      NZ       Pacific/  Singapore  Universal  leapseconds
Arctic/      CET     EET      Etc/     GMT      HST        Israel    MET        NZ-CHAT  Poland    Turkey     W-SU       posixrules

这篇关于Unix-将GMT时间字段转换为PST时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆