質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

String

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

Q&A

解決済

2回答

818閲覧

stringの文字列をDateTime型へ変換したい

ua_y

総合スコア5

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

String

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

0グッド

0クリップ

投稿2023/10/25 00:12

編集2023/10/25 00:31

実現したいこと

2023/10/24 15:55:19 (UTC+09:00) 形式の日付文字列があります。
後々の関数処理のためこの文字列をDateTime型へ変換したいです。

前提

https://dobon.net/vb/dotnet/string/datetimeparse.html
https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings
ここのページを参考にコードを作成してみました。
ですが、型変換できずエラーが投げられています。

発生している問題・エラーメッセージ

System.FormatException: '文字列は有効な DateTime ではありませんでした。'

該当のソースコード

C#

1string str = "2023/10/24 15:55:19 (UTC+09:00)"; 2 3DateTime dt1 = DateTime.ParseExact(str, "G zzz", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);

試したこと

ParseExactの2つ目のFormat引数が間違っているのかと考え、
"G (UTCzzz)"や""yyyy/MM/d HH:mm:ss zzz""に変更してみましたが、同様のエラーとなりました
*追記*
"yyyy/MM/dd HH:mm:ss '(UTC'zzz')'"にformatを変更すると変換自体はエラーにならず実行できましたが、
dt1 = {2023/10/24 15:55:19}
の値のみ入っており、'(UTC'zzz')'の部分が含まれていませんでした。

補足情報(FW/ツールのバージョンなど)

Visual Studio 2022

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

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

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

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

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

guest

回答2

0

ご指摘のコードは、DateTime.ParseExactメソッドの第2引数に指定されている書式が正しくないため、エラーが発生しています。

第2引数には、日付と時刻の文字列の書式を指定します。この場合、文字列にはタイムゾーン情報も含まれているため、書式にはタイムゾーン情報も指定する必要があります。

適切な書式は、次のとおりです。

yyyy/MM/dd HH:mm:ss '(UTC'zzz')'
この書式では、タイムゾーン情報は '(UTC'zzz')' という形式で指定します。

したがって、コードを次のとおりに修正すると、エラーが解消されます。

C#
string str = "2023/10/24 15:55:19 (UTC+09:00)";

DateTime dt1 = DateTime.ParseExact(str, "yyyy/MM/dd HH:mm:ss '(UTC'zzz')'", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);
この修正により、dt1 には、次の値が格納されます。

2023-10-24T15:55:19+09:00
なお、タイムゾーン情報は、DateTimeOffset オブジェクトで格納することもできます。この場合、コードは次のようになります。

C#
string str = "2023/10/24 15:55:19 (UTC+09:00)";

DateTimeOffset dt1 = DateTimeOffset.ParseExact(str, "yyyy/MM/dd HH:mm:ss '(UTC'zzz')'", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.None);
この修正により、dt1 には、次の値が格納されます。

2023-10-24T15:55:19+09:00
Pokemon Infinite Fusion

投稿2024/01/18 03:52

damdam23

総合スコア33

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

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

0

ベストアンサー

こういうのは AI に聞くと出てくることが多いです。ChatGPT に聞いてみました。
Q:"2023/10/24 15:55:19 (UTC+09:00)" を C# で DateTime 型に変更する
A:指定された日時の文字列をC#でDateTime型に変換するには、DateTime.ParseExactまたはDateTime.TryParseExactメソッドを使用することができます。以下は、指定された形式に基づいて文字列をDateTime型に変換する例です。

csharp

1using System; 2using System.Globalization; 3 4class Program 5{ 6 static void Main() 7 { 8 string dateString = "2023/10/24 15:55:19 (UTC+09:00)"; 9 string format = "yyyy/MM/dd HH:mm:ss (UTCzzz)"; 10 11 // 日時文字列をDateTime型に変換 12 DateTime result; 13 if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out result)) 14 { 15 Console.WriteLine("変換結果: " + result); 16 } 17 else 18 { 19 Console.WriteLine("日時の変換に失敗しました。"); 20 } 21 } 22}

このコードは指定された日時文字列を解析し、DateTime型のresult変数に格納します。もし変換に成功した場合は、その結果をコンソールに表示します。変換に失敗した場合は、エラーメッセージを表示します。

追記

追記の部分を見落としてました。
dt1 = {2023/10/24 15:55:19} なら日本時間なのだから変換は成功しています。
dt1.ToString("yyyy/MM/dd HH:mm:ss (UTCzzz)") で期待通りの文字列が得られるはずです。

投稿2023/10/25 01:39

編集2023/10/25 01:51
KOZ6.0

総合スコア2626

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

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

ua_y

2023/10/25 02:00

おっしゃる通り dt1.ToString("yyyy/MM/dd HH:mm:ss (UTCzzz)") で文字出力が得られました! dt1へのDateTime変換自体は成功していて、あとはどうやって出力するかの話だったんですね。。 ChatGPT情報も有益でした。ありがとうございました^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問