ログイン
メインメニュー
|
投稿者 |
スレッド |
hide33 |
Åê¹ÆNo.45538 投稿日時: 2010-8-21 11:10 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
GMTとUTC for Twitter こんにちは。今TwitterのTLを取り込み成功しているのですが、投稿時間がGMTとUTCの関係で9時間ずれて(遅れて)います。Twitterでの設定は日本(東京)にしていますが、吐き出されるデータXMLが9時間ずれています。いろいろ検索しているのですが、解決していません。良い解決策はありませんか、ご教示下さい。 Twitter →XML→PHP→flash var container:Sprite = new Sprite();
addChild(container);
var n:int = Math.floor(Math.random()*1000000);
var xmlURL:String = "http://www.hoge.com/swf/crossdomain-proxy.php?url=http://twitter.com/statuses/user_timeline/hogehoge.xml?cache="+n;
xmlLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, traceComplete);
xmlLoader.load(new URLRequest(xmlURL));
function traceComplete(e:Event):void
{
var iXML:XML = new XML(xmlLoader.data);
bodyArray = new Array();
dateArray = new Array();
//初期化
for(var u:int = 1; u <= 10; u++)
{
if (container.numChildren >= 1) container.removeChild( container.getChildAt(t) );
}
for(var t:int = 1; t <= 10; t++)
{
var body:String = String(iXML.status[t-1].text);
var date:String = String(iXML.status[t-1].created_at);
//格納
bodyArray.push(body);
dateArray.push(date);
}
//trace(bodyArray);
//発言生成
body0.text = bodyArray[0];
//投稿時間取得後ろのごちゃごちゃは丸めよ!
date0.text = dateArray[0].substr(0,16);
}
|
|
|
hide33 |
Åê¹ÆNo.45541 投稿日時: 2010-8-21 13:49 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
Re: GMTとUTC for Twitter 文字列置換を考えましたが、日付を跨いだときに問題が発生しますね。 (例)23時だったら8時にする。Fri Aug 20 23:44:16 +0000 2010 if (dateArray[0].substr(11,2) == 23){
var myPattern:RegExp = new RegExp("23");
var str:String = dateArray[0];
trace(str.replace(myPattern, "08"));
// Fri Aug 20 08:44:16 +0000 2010
}
あと23日/23分/23秒になったらエラーがでるなぁ。
|
|
|
ひろゆき |
Åê¹ÆNo.45542 投稿日時: 2010-8-21 14:09 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境: 10.8.5 Flash Professional CS4/CS6/CC Safari 6.1
|
Re: GMTとUTC for Twitter import utils.PubDate;
var pd:String = "Sat Aug 21 04:37:09 +0000 2010";
pd.split("+0000").join("+0900");
trace(PubDate.toDate(pd));
//2010/8/21 (土)
utils.PubDate.as package utils {
public class PubDate {
// プロパティ
private static var months:Array = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
private static var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
private static var jdays:Array = ["日", "月", "火", "水", "木", "金", "土"];
// コンストラクタ
public function PubDate() {
}
// メソッド
public static function toDate(str:String):String {
var dates:Array = str.split(" ");
var year:uint = uint(dates[5]);
for (var m:uint = 0; m < months.length; m++) {
if (dates[1] == months[m]) {
var month:uint = m;
break;
}
}
var date:uint = uint(dates[2]);
for (var n:uint = 0; n < days.length; n++) {
if (dates[0].substr(0, 3) == days[n]) {
var day:Number = n;
break;
}
}
var time:Array = dates[3].split(":");
var hour:uint = strToUint(time[0]);
var GMT:uint = gmtToInt(dates[4]);
var minute:uint = strToUint(time[1]);
var second:uint = strToUint(time[2]);
var d:Date = new Date(year, month, date, hour+GMT, minute, second);
var dateStyle:String = d.getFullYear()+"/"+(d.getMonth()+1)+"/"+d.getDate()+" ("+jdays[d.getDay()]+")";
return dateStyle;
}
private static function strToUint(str:String):uint {
var n:uint;
if (str.substr(0, 1) == "0") {
n = uint(str.substr(1, 1));
} else {
n = uint(str.substr(0, 2));
}
return n;
}
private static function gmtToInt(str:String):int {
str = str.substr(0, 3);
var n:uint = strToUint(str.substr(1, 2));
var gmt:int;
if (str.substr(0, 1) == "+") {
gmt = n;
} else {
gmt = - n;
}
return gmt;
}
}
}
---------------- 質問する際は、回答者に具体的な情報を与えてください。
|
|
|
hide33 |
Åê¹ÆNo.45543 投稿日時: 2010-8-21 15:08 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
Re: GMTとUTC for Twitter ひろゆきさん、丁寧に教えて戴き有り難う御座いました。 とても勉強になりました。重ねて感謝申し上げます。m( _ _ ) m
|
|
|
野中文雄 |
Åê¹ÆNo.45545 投稿日時: 2010-8-21 15:53 |
ちょんまげら 居住地: 東京 投稿: 4531
使用環境: CS5.5 .6.8 Vista Home Premium (SP1)
|
Re: GMTとUTC for Twitter これでもいいということですかね。 var pd:String = "Sat Aug 21 04:37:09 +0000 2010";
pd = pd.split("+0000").join("+0900");
var _date:Date = new Date(pd)
trace(_date); // 出力: Sat Aug 21 04:37:09 GMT+0900 2010
var date_str:String = _date.fullYear + "/" + (_date.month + 1) + "/" + _date.date;
date_str += "(" + ["日", "月", "火", "水", "木", "金", "土"][_date.day] + ")";
trace(date_str); // 出力: 2010/8/21(土)
引用: mayorさんは書きました:
import utils.PubDate;
var pd:String = "Sat Aug 21 04:37:09 +0000 2010";
pd.split("+0000").join("+0900");
trace(PubDate.toDate(pd));
//2010/8/21 (土)
----------------
|
|
|
ひろゆき |
Åê¹ÆNo.45546 投稿日時: 2010-8-21 16:19 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境: 10.8.5 Flash Professional CS4/CS6/CC Safari 6.1
|
Re: GMTとUTC for Twitter いや、時間表記もしたいのだと思うんですけど。 例に挙げたのは、日付表記をするメソッド(toDate)しか用意していなかったものです。 手抜きです。すみません。 ---------------- 質問する際は、回答者に具体的な情報を与えてください。
|
|
|
hide33 |
Åê¹ÆNo.45547 投稿日時: 2010-8-21 19:42 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
Re: GMTとUTC for Twitter 野中さん、ひろゆきさん 親切に有り難うございました。お二人のコードで解決しました。 時間も分まで取得しました。
|
|
|
hide33 |
Åê¹ÆNo.45576 投稿日時: 2010-8-25 17:38 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
Re: GMTとUTC for Twitter こんにちは。先日はどうも有難う御座いました。 実はAS3では解決したんですが、その後AS2でも利用する機会が出てきまして、 下記コードの赤字のところが、タイプが一致しない旨エラーが出ています。 宜しくお願い致します。 class PubDateTwitter {
// プロパティ
private static var months:Array = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
private static var days:Array = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
private static var jdays:Array = ["日", "月", "火", "水", "木", "金", "土"];
// コンストラクタ
public function PubDateTwitter() {
}
// メソッド
public static function toDate(str:String):String {
var dates:Array = str.split(" ");
var year:Number = Number(dates[5]);
for (var m:Number = 0; m < months.length; m++) {
if (dates[1] == months[m]) {
var month:Number = m;
break;
}
}
var date:Number = Number(dates[2]);
for (var n:Number = 0; n < days.length; n++) {
if (dates[0].substr(0, 3) == days[n]) {
var day:Number = n;
break;
}
}
var time:Array = dates[3].split(":");
var hour:Number = strToNumber(time[0]);
var GMT:Number = gmtToInt(dates[4]);
var minute:String = time[1];
var second:Number = strToNumber(time[2]);
var d:Date = new Date(year, month, date, hour+GMT, minute, second);
var dateStyle:String = (d.getMonth()+1)+"/"+d.getDate()+d.getHours()+":"+d.getMinutes()+d.getFullYear();
return dateStyle;
}
private static function strToNumber(str:String):Number {
var n:Number;
if (str.substr(0, 1) == "0") {
n = Number(str.substr(1, 1));
} else {
n = Number(str.substr(0, 2));
}
return n;
}
private static function gmtToInt(str:String){
str = str.substr(0, 3);
var n:Number = strToNumber(str.substr(1, 2));
var gmt:Number;
if (str.substr(0, 1) == "+") {
gmt = n;
} else {
gmt = - n;
}
return gmt;
trace(gmt);
}
}
|
|
|
ひろゆき |
Åê¹ÆNo.45578 投稿日時: 2010-8-25 17:47 |
ちょんまげら 居住地: 東京砂漠 投稿: 4403
使用環境: 10.8.5 Flash Professional CS4/CS6/CC Safari 6.1
|
Re: GMTとUTC for Twitter エラー内容は、もう少し具体的に提示しましょう。 また、フレームアクション側のスクリプトも提示されなければ、 回答者が別途用意しなければならず、負担が大きくなります。 //var minute:String = time[1];
var minute:Number = time[1];
---------------- 質問する際は、回答者に具体的な情報を与えてください。
|
|
|
hide33 |
Åê¹ÆNo.45579 投稿日時: 2010-8-25 18:46 |
半人前 居住地: 投稿: 39
使用環境: CS4 10.6
|
Re: GMTとUTC for Twitter ひろゆきさん、ご指摘有り難う御座いました。
確かにStringになってますね。AS3の時、動作したので気がつきませんでした。 下記エラーは出なくなったのですが、 今度は目的のダイナミックテキストに _root.date.text = PubDateTwitter.toDate(dateArray[0]);とすると エラーは出ないのですが、ダイナミックテキストにNaNNaNNaN:NaNの表示がでます。
そこで var dateStyle:String = d.toString(d.getHours()+":"+minute+" "+(d.getMonth()+1)+"/"+d.getDate()+" "+days[d.getDay()]); とすると今度はダイナミックテキストにInvalid Dateと表示されています。 まだまだ勉強中なのですが解決法をご教示下さい。
|
|
|
|
|