Как определить часовой пояс календаря в Outlook

У меня есть это календарное время:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20130426T133000Z
DTSTART:20130426T133000Z
DTEND:20130426T143000Z
SUMMARY:New Test
DESCRIPTION:  - http://www.domain.com/content/new-test
LOCATION:
END:VEVENT
END:VCALENDAR

А время и дата хранятся в DTSTAMP, DTSTART и DTEND, однако Outlook не добавляет информацию о часовом поясе к этим датам. Есть ли способ сделать это? Я считаю, что Z в конце относится к часовому поясу «Зулу» или UTC. Я ошибаюсь в этом предположении?

Как мне заставить Outlook распознать, что данное время находится в EST, и изменить его, если пользователь находится в CST? Есть ли способ сделать это легко? (Я генерирую файлы iCal/vCal автоматически, поэтому все, что находится в этом файле, я имею прямой контроль). Я использую PHP для создания этого файла (технически он создается модулем Drupal)


person Steven Matthews    schedule 26.04.2013    source источник
comment
Outlook хранит все данные в формате UTC, что упрощает работу с переходом на летнее время и изменением часового пояса.   -  person Marc B    schedule 26.04.2013


Ответы (1)


20130426 -- Это формат ГГГГММДД 133000Z - 1330 – время по Гринвичу 00Z – просто дополнительный текст

Хех, я как раз работал над этим на этой неделе, вот код, который я использую для этого:

// DISPLAY CALENDER EVENT
$startdate = date('Ymd',strtotime($startdate)); //needs the YYYYMMDD  format
$enddate = date('Ymd',strtotime($enddate)); //ends the day before the set date. So the date range is startdate(inclusive) -> enddate(exclusive)
$startTime = gmdate('Hi',mktime($startminutes,$startseconds)); // This is in greenwhich mean time. Have the users input time normally and simply  
                                                              //explode on :
$endTime   = gmdate('Hi',mktime($endminutes,$endseconds));
$subject   = 'yeah';
$desc      = 'come to this meeting';
$location = 'wherever';

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true))."
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:".$startdate."T".$startTime."00Z
DTEND:".$enddate."T".$endTime."00Z
LOCATION:$location
SUMMARY:".$subject."
DESCRIPTION:".$desc."
END:VEVENT
END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');
echo $ical;

Этот сайт помог сделать это: http://www.daveismyname.com/development/adding-events-to-microsoft-outlook-from-php-using-ical/

person Useless Intern    schedule 26.04.2013