Założono, że będzie to tak proste jak $ENV{TZ}
, ale zmienna środowiskowa TZ
nie jest ustawiona, a jednak komenda nadal wie, że jestem w EDT, więc musi być jakiś inny sposób określania strefy czasowej (inne niż powiedzenie chomp(my $tz = qx/date +%Z/);
) .Jak określić bieżącą strefę czasową, w której maszyna jest ustawiona za pomocą Perla?
Odpowiedz
use POSIX;
print strftime("%Z", localtime()), "\n";
Myślałem o% Z, ale pamiętam coś o tym nie działa na niektórych systemach. –
Według mężczyzny strftime% Z jest standardową specyfikacją i powinno być obsługiwane na wszystkich platformach. –
Myślę, że pamiętałem to z dokumentów POSIX: Specyfikator "Z" jest notportalnie nieprzenośny, ponieważ nazwy stref czasowych są niestandardowe. Trzymanie się numerycznych specyfikatorów jest najbezpieczniejszą drogą. Ale myślę, że jest to prawdopodobnie wystarczająco bezpieczne dla moich celów. –
use POSIX;
localtime();
my ($std, $dst) = POSIX::tzname();
tzname()
daje dostęp do globalnej tzname
POSIX - ale trzeba nazwali localtime()
aby była ona ustawiona w pierwszej kolejności.
Jeśli chcesz coś bardziej mobilny niż POSIX
(ale prawdopodobnie znacznie wolniej) można użyć DateTime :: TimeZone w tym:
use DateTime::TimeZone;
print DateTime::TimeZone->new(name => 'local')->name();
Może tym szybciej:
my @lt = localtime(12*60*60);
my @gt = gmtime(12*60*60);
$tz = @lt[2] - @gt[2];
$tz_ = sprintf("%+03d:00", $tz); # for +02:00 format
Aby uzupełnić odpowiedź, możesz użyć przycisku [edytuj] (http://stackoverflow.com/posts/29400576/edit). – ZygD
Jeśli wystarczy coś jak +05:30
(UTC + 5,5/czas Indie), możesz użyć następującego kodu.
my @lt = localtime();
my @gt = gmtime();
my $hour_diff = $lt[2] - $gt[2];
my $min_diff = $lt[1] - $gt[1];
my $total_diff = $hour_diff * 60 + $min_diff;
my $hour = int($total_diff/60);
my $min = abs($total_diff - $hour * 60);
print sprintf("%+03d:%02d", $hour, $min);
Ta odpowiedź jest inspirowana powyższą odpowiedzią Pavela.
- 1. Jak określić strefę czasową w UIDatePicker
- 2. Jak określić strefę czasową według przesunięcia UTC?
- 3. Jak zmienić strefę czasową za pomocą adb
- 4. Kiedy należy aktywować/dezaktywować bieżącą strefę czasową w Django (1.4)?
- 5. Jak poprawnie zapisać strefę czasową za pomocą Rubiego i MongoID?
- 6. Jak ustawić strefę czasową w kanale iCal za pomocą DDay.iCal?
- 7. uzyskać Strefę czasową za pomocą szerokości i długości geograficznej?
- 8. Dostosuj strefę czasową
- 9. Android, jak ustawić strefę czasową za pomocą aplikacji
- 10. Jak ustawić strefę czasową za pomocą pliku org.joda.time?
- 11. Jak uzyskać lokalną strefę czasową w PHP?
- 12. Jak uzyskać strefę czasową użytkownika?
- 13. jak wykryć strefę czasową klienta?
- 14. Jak stworzyć strefę czasową Django-admin?
- 15. Pobierz strefę czasową/kraj z iPhone'a
- 16. Jak ustawić strefę czasową przed wywołaniem strftime?
- 17. Jak programowo ustawić strefę czasową w Javie?
- 18. Jak ustawić strefę czasową w Crashlytics?
- 19. Jak ustawić strefę czasową w gnuplot?
- 20. Jak zmienić strefę czasową w jenkins
- 21. Jak zmienić strefę czasową dla aplikacji asp.net
- 22. H2 ustawić domyślną strefę czasową
- 23. Wyodrębnij strefę czasową ze stringa
- 24. Jak przekonwertować strefę czasową wartości serii Pandas
- 25. Jak poprawnie ustawić strefę czasową mysql
- 26. Jak ustawić strefę czasową wartości w Pandas DataFrame?
- 27. Jak ustawić strefę czasową z wiersza poleceń?
- 28. Jak ustawić strefę czasową dla Postgres psql?
- 29. MYSQL ustawić strefę czasową w kodzie PHP
- 30. Jak ustawić strefę czasową na wątek?
Dla dodatkowych informacji w moim systemie strefa czasowa jest regulowana przez plik/etc/localtime, a libc wydaje się wiedzieć, jak tego użyć. –