Метка времени RFC во Flash / AS3

Я хотел бы знать, есть ли у Flash / AS3 какой-либо хороший способ преобразовать объект AS3 'Date' в / из формата метки времени rfc-850 (используемый датой HTTP и последний измененный).

Этот вопрос очень похож на этот вопрос о rfc 3339, кроме AS3 и rfc-850.

RFC-850 выглядит так: Thu, 09 Oct 2008 01:09:43 GMT


person aaaidan    schedule 09.10.2008    source источник


Ответы (2)


Хорошо, вот пара функций для преобразования RFC-802 / Date во Flash.

Я узнал, что объект Date на самом деле не имеет понятия о часовом поясе и предполагает, что он находится в местном часовом поясе. Если вы передадите дату RFC-802 в конструктор Date(), он проанализирует все, кроме маркера часового пояса «GMT» в конце, что приведет к правильному времени, но, возможно, в неправильном часовом поясе.

Вычитание текущего часового пояса из анализируемой даты компенсирует это, поэтому временная метка может совершать круговой обход с этими функциями, не становясь полностью ошибочными.

(Разве не было бы замечательно, если бы кто-нибудь включил свойство timezone при разработке класса Date?)

/**
 * Converts an RFC string to a Date object.
 */
function fromRFC802(date:String):Date {
    // Passing in an RFC802 date to the Date constructor causes flash
    // to conveniently ignore the "GMT" timezone at the end, and assumes
    // that it's in the Local timezone.
    // If we additionally convert it back to GMT, then we're sweet.

    var outputDate:Date = new Date(date);
    outputDate = new Date(outputDate.time - outputDate.getTimezoneOffset()*1000*60);
    return outputDate;
}

/** 
 * Converts a Date object to an RFC802-formatted string (GMT/UTC).
 */
function toRFC802 (date:Date):String {
    // example: Thu, 09 Oct 2008 01:09:43 GMT

    // Convert to GMT

    var output:String = "";

    // Day
    switch (date.dayUTC) {
    case 0: output += "Sun"; break;
    case 1: output += "Mon"; break;
    case 2: output += "Tue"; break;
    case 3: output += "Wed"; break;
    case 4: output += "Thu"; break;
    case 5: output += "Fri"; break;
    case 6: output += "Sat"; break;
    }

    output += ", ";

    // Date
    if (date.dateUTC < 10) {
        output += "0"; // leading zero
    }
    output += date.dateUTC + " ";

    // Month
    switch(date.month) {
    case 0: output += "Jan"; break;
    case 1: output += "Feb"; break;
    case 2: output += "Mar"; break;
    case 3: output += "Apr"; break;
    case 4: output += "May"; break;
    case 5: output += "Jun"; break;
    case 6: output += "Jul"; break;
    case 7: output += "Aug"; break;
    case 8: output += "Sep"; break;
    case 9: output += "Oct"; break;
    case 10: output += "Nov"; break;
    case 11: output += "Dec"; break;
    }

    output += " ";

    // Year
    output += date.fullYearUTC + " ";

    // Hours
    if (date.hoursUTC < 10) {
        output += "0"; // leading zero
    }
    output += date.hoursUTC + ":";

    // Minutes
    if (date.minutesUTC < 10) {
        output += "0"; // leading zero
    }
    output += date.minutesUTC + ":";

    // Seconds
    if (date.seconds < 10) {
        output += "0"; // leading zero
    }
    output += date.secondsUTC + " GMT";

    return output;
}

var dateString:String = "Thu, 09 Oct 2008 01:09:43 GMT";

trace("Round trip proof:");

trace(" RFC-802: " + dateString);
trace("Date obj: " + fromRFC802(dateString));
trace(" RFC-802: " + toRFC802(fromRFC802(dateString)));
trace("Date obj: " + fromRFC802(toRFC802(fromRFC802(dateString))));
trace(" RFC-802: " + toRFC802(fromRFC802(toRFC802(fromRFC802(dateString)))));
person aaaidan    schedule 09.10.2008

В библиотеках as3corelib есть методы DateUtil.toRFC822 () и DateUtil.parseRFC822 () (среди прочих). Не знаю, именно это ли вы ищете.

Конкретная документация для класса DateUtil находится здесь: http://as3corelib.googlecode.com/svn/trunk/docs/com/adobe/utils/DateUtil.html

person Raleigh Buckner    schedule 09.10.2008
comment
Близко, но RFC822 кажется другим. RFC 822 - ›09 августа 08 0109 GMT RFC 850 -› Чт, 9 октября 2008 01:09:43 GMT Спасибо за ответ. Я исправил вопрос. - person aaaidan; 09.10.2008