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

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

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

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

C#

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

Visual Studio

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

2回答

11388閲覧

datetimeを今日を基準にint型に変換したい

pj7577bm60v

総合スコア13

DateTime

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

C#

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

Visual Studio

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

1グッド

1クリップ

投稿2020/04/19 09:01

編集2023/07/21 19:28

前提・実現したいこと

C#で勉強しているものです。
カレンダーを作成しているのですが、DateTime,DateTimeOffsetをしようして変数を取得して
今日を0,明日を1,三日後を3などのint型の変数を取得するにはどうすればよいのでしょうか。

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

エラーメッセージ

該当のソースコード

C#

1private void button1_Click(object sender, EventArgs e) 2 { 3 DateTime dat1 = DateTime.Now; 4 DateTime dat2 = new DateTime(2020, 4, 25); 5 var result = dat1 - dat2; 6 label1.Text = Convert.ToString(result); //-5.06:15:16:6865582などの計算結果になる 7 } 8
private void button1_Click(object sender, EventArgs e) { var dat3 = new DateTimeOffset(DateTime.Now,TimeSpan.Zero); //この行でDatetime.Nowを使用した場合下記の行で例外が発生する var dat4 = new DateTime(2020, 4, 10, 0, 0, 0); //この行で例外が発生する var dat5 = new DateTimeOffset(dat4, TimeSpan.Zero); var result1 = dat4 - dat5; label1.Text = Convert.ToString(result1);   }

試したこと

いろいろ試したのですがgoogle検索で検索したもので算出できませんでした。
一つ目の計算結果からint型に変換するメソッドを見つけられませんでした。
よろしくお願いします。

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

Microsoft Visual Studio Community 2019
Version 16.5.4
.NET Framework version 4.8.03752

TN8001👍を押しています

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

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

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

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

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

Zuishin

2020/04/19 09:16

var dat3 = new DateTimeOffset(DateTime.Now,TimeSpan.Zero); //この行でDatetime.Nowを使用した場合下記の行で例外が発生する ↑を↓のようにしたとき、例外は発生しなくなりますが、不可解な仕様ですね。 var dat3 = new DateTimeOffset(DateTime.Now, TimeSpan.FromHours(9)); //この行でDatetime.Nowを使用した場合下記の行で例外が発生する
Zuishin

2020/04/19 10:07

https://docs.microsoft.com/ja-jp/dotnet/api/system.datetimeoffset.-ctor?view=netframework-4.8#System_DateTimeOffset__ctor_System_DateTime_System_TimeSpan_ とりあえず、DateTimeOffset のコンストラクタが発生させる例外のようなので、それがなぜか DateTime のインスタンスを作成する時に遅延発生しているのでしょう。 意味合いとしては、ローカル時間という設定になっているはずなのに 9 ではなく 0 になっているのがおかしいということです。 https://docs.microsoft.com/ja-jp/dotnet/standard/datetime/instantiating-a-datetimeoffset-object?view=netframework-4.8 > 最初のパラメーターの Kind プロパティが DateTimeKind.Localの場合、2番目のパラメーターの値は、ローカルシステムのタイムゾーンのオフセットである必要があります。 最初のパラメーターの Kind プロパティが DateTimeKind.Unspecifiedの場合、オフセットには任意の有効な値を指定できます。 DateTimeKind.Unspecified で作成すると大丈夫だと思います。 しかし、根本的な問題として、この質問の問題を解決するのに DateTimeOffset は必要ありません。詳細は他の回答者さん(たち)の回答をご覧ください。
pj7577bm60v

2020/04/19 12:59

m.ts10806さん 詳細を一部分に固めてしまい空白を埋めていく作業になってしまってました。 次回から気を付けていきます。 ご指摘ありがとうございました。
m.ts10806

2020/04/19 13:01

質問は編集できますので適宜ご対応ください
pj7577bm60v

2020/04/19 13:07

Zuishinさん程解析できるようになりたいものです。 しっかり勉強させていただきます。 ありがとうございました。
guest

回答2

0

ベストアンサー

今の時間が何時でもいいように.Dateしてから引き算、TimeSpan.Daysが目的の数値です。

cs

1private void button1_Click(object sender, EventArgs e) 2{ 3 DateTime dateTime1 = DateTime.Now; 4 DateTime dateTime2 = new DateTime(2020, 4, 25); 5 6 TimeSpan result = dateTime2.Date - dateTime1.Date; 7 int days = result.Days; 8 label1.Text = days.ToString(); // 6 9}

cs

1private void button1_Click(object sender, EventArgs e) 2{ 3 DateTimeOffset dateTimeOffset1 = DateTimeOffset.Now; 4 5 // どれも 2020/04/10 0:00:00 +09:00 6 //DateTimeOffset dateTimeOffset2 = new DateTimeOffset(new DateTime(2020, 4, 10, 0, 0, 0), TimeSpan.FromHours(9)); 7 //DateTimeOffset dateTimeOffset2 = new DateTimeOffset(new DateTime(2020, 4, 10, 0, 0, 0, DateTimeKind.Local)); 8 DateTimeOffset dateTimeOffset2 = new DateTimeOffset(new DateTime(2020, 4, 10, 0, 0, 0)); 9 10 TimeSpan result = dateTimeOffset2.Date - dateTimeOffset1.Date; 11 int days = result.Days; 12 label1.Text = days.ToString(); // -9 13}

日本時間で計算するんですよね?

投稿2020/04/19 10:13

編集2023/07/21 10:28
TN8001

総合スコア9242

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

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

pj7577bm60v

2020/04/19 13:09

分かりやすい回答でとてもすっきりしました。 ありがとうございました。
pj7577bm60v

2020/04/19 13:10

日本時間で計算いたします。 日本時間で算出できました。 ありがとうございました。
guest

0

DateTime.Day プロパティを使うとか、何か月かにまたがる場合は DateTime.Subtract メソッドを使うなどして計算してはいかがですか?

投稿2020/04/19 09:09

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

pj7577bm60v

2020/04/19 13:11

参考にさせていただきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問