🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
date

dateは、date型や日付に関する関数や処理についてのタグです

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

2回答

3486閲覧

SwiftでStringからDateへの変換

sharman

総合スコア6

date

dateは、date型や日付に関する関数や処理についてのタグです

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/30 02:23

SwiftでStringからDateへの変換でわからないことがあります。


変換前のString→19900401
変換後のDate →1990-03-31 15:00:00 +0000


変換前のString→1990/04/01
変換後のDate →1990-03-31 15:00:00 +0000

変換させているメソッドは以下です。

Swift

1func getDate(format: String) -> Date { 2 3 let jaLocale = String.jaLocale 4 let greCalender = Calendar(identifier: .gregorian) 5 6 let formatter = DateFormatter() 7 formatter.calendar = greCalender 8 formatter.locale = jaLocale 9 formatter.dateFormat = format 10 return formatter.date(from: self)! as Date 11}

呼びもと

Swift

1let birth: Date = strBirth.getDate(format: "yyyyMMdd") 2let birth: Date = strBirth.getDate(format: "yyyy/MM/dd")

このような方法でStringの日付をDateに変換しています。

Date変換時にUTC+9時間で変換する方法はありますか?
ご教授おねがいいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

質問への回答ではなくTakeOneさんの回答への補足になりますが、日本のタイムゾーンで表示させたい場合は、日本のタイムゾーンを設定して下さい。

swift

1dateFormatter.timeZone = TimeZone(identifier: "Asia/Tokyo") 2//とか 3dateFormatter.timeZone = TimeZone(abbreviation: "JST") 4//など

投稿2019/10/30 07:44

編集2019/11/01 01:06
fuzzball

総合スコア16733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

Date型の中にタイムゾーンの情報はありませんので、
1990-03-31 15:00:00 +0000という表示が
print(birth)で表示した結果なのであれば、
それで正しく変換されています。

Date型の変数をprintした時の+0000という表示は、
表示した時刻がUTCであることを明示するために固定的に
付与した文字です。そもそもタイムゾーンの情報は持っていないので、
print(birth)の結果が1990-04-01 00:00:00 +0900
と表示されるようDate型の値を設定することはできません。

Date型の値をタイムゾーンを加えた形で表示したい場合は、
DateFormatterで文字列に変換したものを表示する必要があります。
(DateFormatterのtimezoneプロパティは、システム設定のタイムゾーンが
自動的に反映されます。システム設定と異なるタイムゾーンを使って
変換したい場合は、timezoneプロパティを自分で設定する必要があります。)

swift

1let dateFormatter = DateFormatter() 2dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 3print(dateFormatter.string(from: birth))

投稿2019/10/30 03:26

編集2019/10/31 12:33
TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sharman

2019/10/30 04:24

タイムゾーンの概念がないから、自動的にUTCに合わせた表示になるだけ。 ってことなんですね。 正しく変換されているなら問題ないです。ありがとうございます。
fuzzball

2019/10/30 07:46 編集

Localeは書式などの地域設定なのでタイムゾーンは関係ないかと。
TakeOne

2019/10/31 12:34 編集

fuzzballさん、指摘ありがとうございます。 localeを指定することでtimezoneも一緒に変更されるのかと勘違いしていました。 改めて確認したところ、localeの設定はtimezoneに影響しておらず、DateFormatterのインスタンスを作成した時に、システムに設定されたタイムゾーンが、DateFormatterのtimezoneに自動的に反映されていることがわかりました。 これを踏まえて回答を修正しました。
fuzzball

2019/11/01 01:10

質問に対しては、この回答(の前半部分)で解決出来ていますので、補足として指摘および回答を書かせていただきました。修正対応ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問