2012-04-05 5 views
2

私は、NOW()を使用して時刻を設定するmySQLデータベースにユーザー間で送信されたデータの時刻を格納するサーバーを持っています。 私は受信者の現地時間に時間を変換しようとしていますが、多くの運がありません(私は保存する前に時間を変換しますが、送信側ではなく受信側にとってローカルになるようにします)。 日付を文字列としてアプリケーションに返され、次のように私はそれを調整しようとしています:iOS - mySQLサーバーから受け取った日付をユーザーにローカル時刻に変換する

NSString *string1 = [[receivedMessages objectAtIndex:thisRow]objectAtIndex:2]; 
NSDate *messageDate; 
NSCalendar* cal = NSCalendar.currentCalendar; 
NSTimeZone* tz = cal.timeZone; 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MM dd yyyy hh:mma"]; 
[formatter setTimeZone:tz]; 

messageDate = [formatter dateFromString:string1]; 

それは一種の日付をフォーマットではなく、正しくありません。などのアプリで受信された日付:Xcodeのは日付が最初の場所でに属している時間帯アウトどのように動作するか私は思ったんだけど

2012-04-05 04:49:00 +0000 

April 5 2012 5:49AM 

がに変換されますか?

実は、私はちょうどそれが再び

NSCalendar* cal = NSCalendar.currentCalendar; 
NSTimeZone* tz = cal.timeZone; 

の代わりに

NSTimeZone *pst = [NSTimeZone timeZoneWithAbbreviation:@"PST"]; 

を使用してテストしてみた、それはまだ私に2012-04-05四時49分00秒のような時間を与えます+ 0000。

誰もが考えている?

多くのおかげ

答えて

2

From the Apple docsmessageDate = [formatter dateFromString:string1];はNSDateを返します。結果を表示しているときは、(私が推測している)NSDateオブジェクトを印刷していて、ISO 8601 dateに文字列化されています。これらのNSDateオブジェクトは、絶対時間(タイムゾーン情報なし)に正規化されます。

日付オブジェクトを取得したら、さらにステップを進めて出力をフォーマットします。私が推測しているのは元の時間のものだから、これは大丈夫です(dateFromStringは「絶対時間」に変換されます)。追加する必要があるのは、ローカルで時間を取得するためのものです。localizedStringFromDate:dateStyle:timeStyle:などです。

//If this is not in UTC, we don't have any knowledge about 
//which tz it is. MUST BE IN UTC. 
dateString = "2012-03-12 9:53:23" 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MM dd yyyy hh:mma"]; 

NSDate *date = [formatter dateFromString:dateString]; 

NSString *result = [NSDateFormatter localizedStringFromDate:date dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]; 

//The result should be in MY timezone automatically. 
+0

私は完全にあなたに従っているかどうかはわかりません。現時点でどのように動作しているかを説明する方が簡単かもしれません。ユーザーがデータを送信すると、記録された時間はサーバー上の時間です - GMTです。しかし、送付者がニューヨークにいて、受取人が東京にいる場合、GMTは受取人には役に立たず、NYCでの時間もありません。ですから、GMT時間をユーザの現地時間に変換する必要がありますが、localizedStringFromDateがどのようにそれを行うのかわかりません。限り、私はそれが日付の構造をフォーマットするためだけであることを伝えることができます - その値を変更しないでください?または、私はそれをどのように使用するのか誤解しましたか? – TheBestBigAl

+1

サーバーから日付を取得するとき、その形式は何ですか?文字列ISO 8601: '2012-02-28T09:13:23Z'、正規文字列:' April 5 2012 12:34 AM'、POSIX: '123582342'? – Stephen

+0

これはちょうどこのように見えます:2012-04-05 16:14:00、IOS 8601バージョンに最も似ていますが、そこにはTやZはありません。 – TheBestBigAl

関連する問題