Как я могу проанализировать даты и преобразовать часовые пояса в Perl?

Я использую этот метод:

func captureScreen() -> UIImage {
    var window: UIWindow? = UIApplication.sharedApplication().keyWindow
    window = UIApplication.sharedApplication().windows[0] as? UIWindow
    UIGraphicsBeginImageContextWithOptions(window!.frame.size, window!.opaque, 0.0)
    window!.layer.renderInContext(UIGraphicsGetCurrentContext())
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image;
}

Он фиксирует все, кроме строки состояния, и не запрашивает разрешения на сохранение изображений в рулоне камеры.

Hope это помогает!

26
задан brian d foy 16 January 2010 в 16:34
поделиться

4 ответа

Поскольку встроенные в Perl интерфейсы обработки дат выглядят неуклюже, и вы передаете около полудюжины переменных, лучше использовать DateTime или Time :: Piece . ]. DateTime - это поющий, все танцующий объект даты Perl, и вы, вероятно, в конечном итоге захотите его использовать, но Time :: Piece более прост и идеально подходит для этой задачи, имеет преимущество доставки с 5.10, а техника в основном то же самое для обоих.

Вот простой и гибкий способ использования Time :: Piece и strptime .

#!/usr/bin/perl

use 5.10.0;

use strict;
use warnings;

use Time::Piece;

# Read the date from the command line.
my $date = shift;

# Parse the date using strptime(), which uses strftime() formats.
my $time = Time::Piece->strptime($date, "%Y%m%d %H:%M");

# Here it is, parsed but still in GMT.
say $time->datetime;

# Create a localtime object for the same timestamp.
$time = localtime($time->epoch);

# And here it is localized.
say $time->datetime;

А вот и способ для контраста.

Так как формат фиксирован, регулярное выражение будет работать нормально, но если формат изменится, вам придется настроить регулярное выражение.

my($year, $mon, $day, $hour, $min) = 
    $date =~ /^(\d{4}) (\d{2}) (\d{2})\ (\d{2}):(\d{2})$/x;

Затем преобразуйте его в время эпохи Unix (секунды с 1 января 1970 г.)

use Time::Local;
# Note that all the internal Perl date handling functions take month
# from 0 and the year starting at 1900.  Blame C (or blame Larry for
# parroting C).
my $time = timegm(0, $min, $hour, $day, $mon - 1, $year - 1900);

А затем вернитесь к местному времени.

(undef, $min, $hour, $day, $mon, $year) = localtime($time);

my $local_date = sprintf "%d%02d%02d %02d:%02d\n",
    $year + 1900, $mon + 1, $day, $hour, $min;
48
ответ дан ikegami 28 November 2019 в 06:21
поделиться

Вот пример, с помощью DateTime и модуль формата strptime.

use DateTime;
use DateTime::Format::Strptime;

my $val = "20090103 12:00";

my $format = new DateTime::Format::Strptime(
                pattern => '%Y%m%d %H:%M',
                time_zone => 'GMT',
                );

my $date = $format->parse_datetime($val);

print $date->strftime("%Y%m%d %H:%M %Z")."\n";

$date->set_time_zone("America/New_York");  # or "local"

print $date->strftime("%Y%m%d %H:%M %Z")."\n";

$ perl dates.pl
20090103 12:00 UTC
20090103 07:00 EST

<час>, Если бы Вы хотели проанализировать localtime, вот то, как Вы сделали бы это:)
use DateTime;

my @time = (localtime);

my $date = DateTime->new(year => $time[5]+1900, month => $time[4]+1,
                day => $time[3], hour => $time[2], minute => $time[1],
                second => $time[0], time_zone => "America/New_York");

print $date->strftime("%F %r %Z")."\n";

$date->set_time_zone("Europe/Prague");

print $date->strftime("%F %r %Z")."\n";
21
ответ дан ikegami 28 November 2019 в 06:21
поделиться

Это - то, что я сделал бы...

#!/usr/bin/perl
use Date::Parse;
use POSIX;

$orig = "20090103 12:00";

print strftime("%Y%m%d %R", localtime(str2time($orig, 'GMT')));

можно также использовать Time::ParseDate и parsedate() вместо Date::Parse и str2time(). Обратите внимание что фактический стандартный банкомат. кажется, DateTime (но Вы не могли бы хотеть использовать синтаксис OO только для преобразования метки времени).

5
ответ дан ikegami 28 November 2019 в 06:21
поделиться

Выберите:

существует огромное количество других, несомненно, но они - вероятно, главные соперники.

4
ответ дан Jonathan Leffler 28 November 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: