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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

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

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

.NET Framework

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

Q&A

5回答

1343閲覧

今が夏かどうかを判定したい。

FumbleWarez

総合スコア0

C#

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

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

.NET Framework

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

0グッド

1クリップ

投稿2023/08/12 09:07

実現したいこと

大雑把でよいので今が夏かどうかを判定したい。
どこかにIsSummerみたいなものがあればいいんですけど。

前提

1.特殊な権限が必要でないこと。
→例えば位置情報は権限が必要。

2.インターネット接続が必要でないこと。

3.判定は大雑把で良い。
→6~9月が夏でも良い。

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

とりあえず、確定できそうな条件として1個ぐらいしか思いつきません。

  1. タイムゾーンに夏時間があり、今が夏時間の場合は夏。

それ以外では日付で判定できそうですが、北半球か南半球のどちらに属しているかがわからないと判定できないのです。
(カルチャー情報にそれっぽいものありませんよね?カルチャー別に全部組み込まないとダメ?)

該当のソースコード

試したこと

タイムゾーンの情報で夏時間の有無と夏時間かどうかはとれます。

位置情報もとれましたが、権限が必要なため前提条件に合わないのと、赤道近くだと位置情報の北半球/南半球であり、カルチャー別の判定は出来ません・・・

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

Windows環境でのみ動けば良いです。(Win32APIは使用できます。)
タイムゾーンを地図にプロットするためのAPIってありませんでしたっけ・・・?

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

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

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

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

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

YAmaGNZ

2023/08/12 09:45 編集

貴方の言う「夏」の定義とはなんでしょうか? 夏時間=夏とした場合、例えばアメリカですと夏時間の開始は3月第2日曜2時となっています。 しかし3月の第二週は「夏」なのですか? また、夏時間を採用していない地域もありますが、その場合はどうするのですか?
ikedas

2023/08/12 12:04

意見交換でやるテーマでは。
d01si13293

2023/08/12 22:01

> →6~9月が夏でも良い。 これで良いなら何を悩んでるの? 6月1日から9月30日なら夏でそうでなかったらそれ以外と判定するだけでしょ?
maisumakun

2023/08/12 22:57

判定して、「何に使いたい」のでしょうか? 「メッセージや画像を出し分けたい」という用事(で南半球まで考えないといけない状況)なら、どちらにしてもロケール別の出し分けが必須となるでしょう。
YAmaGNZ

2023/08/12 23:17

タイムゾーンを取得できるなら、そこが北半球か南半球か識別するためのテーブルでも作成して、北半球なら6~8月、南半球なら12月~2月と判断すればいいのでは?
ikedas

2023/08/13 02:46 編集

念のためですが、南半球か北半球かを知りたければ、必要な情報はロケール (言語や表記法) でもタイムゾーン (経度差) でもなくて、**緯度**です。
YAmaGNZ

2023/08/13 03:23 編集

質問者さんが「位置情報を取りたくない」と言っていてタイムゾーンなら取れると言っていたのでその情報から割り出すならということで提案したのですが・・・ タイムゾーンならその時間を採用しているエリアですからその国なり都市なりになるわけで北半球か南半球かはある程度分かるのでは?
d01si13293

2023/08/13 03:33

赤道直下の国とか夏がない国とか色々問題はあるけどネットに繋がないローカルの話なんだから夏の範囲くらいインストールしたユーザーが設定すればいいよね
ikedas

2023/08/13 03:35 編集

@YAmaGNZさん たとえばIANAのTime Zone Databaseだとタイムゾーン毎に一つの都市名を対応づけていますね。しかし北半球南半球を知るためには、その都市の市域の緯度を知る方法が必要です。
YAmaGNZ

2023/08/13 03:36

>その都市の市域の緯度を知る方法が必要です だから「北半球か南半球か識別するためのテーブルでも作成して」と言っています。
d01si13293

2023/08/13 03:40

> カルチャー別に全部組み込まないとダメ? とか言ってる人の作るものがそもそもそこまでする必要があるとは思えないんだよね もっと簡単な話を質問者が勝手に条件膨らませて難しくしてるんじゃないの?
ikedas

2023/08/13 03:46

@YAmaGNZさん 「念のため」と書いたコメントは質問者さんへの説明で、YAmaGNZさんへの異論などではないですよ。
KOZ6.0

2023/08/13 10:38

質問者さんはどうやって位置情報を取得したんでしょうか。 Windows の位置情報サービスから取得しているなら、ネット接続されてないとダメな気がします。 「Windows 位置情報サービスとプライバシー」 https://support.microsoft.com/ja-jp/windows/windows-%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%A8%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC-3a8eee0a-5b0b-dc07-eede-2a5ca1c49088 違う方法であれば、ぜひ共有していただきたいです。
KOZ6.0

2023/08/13 10:47

ikedas さんのコメントにあった IANA の Time Zone Database https://www.iana.org/time-zones からダウンロードできる tzdata2023c.tar.gz の中にある zone.tab を見ると、位置情報らしきものがありますね。 たとえば東京だと JP +353916+1394441 Asia/Tokyo となっています。 (解釈がよくわかりません。北緯 35.3916度 東経139.4441度だと藤沢市あたりになる。) もっとも北半球/南半球かがわかれば良いので、左側の数値がプラスなら北半球、マイナスなら南半球で良いと思います。 これを sqlite や Access に登録して配布すれば OK かと。 更新はどうするの?という問題は残りますが。
ikedas

2023/08/13 12:32

雑談です。 日本経緯度原点 (1888-1937年の間の日本標準時の本初子午線でもあった) を指しているようですが、微妙にずれていますね。 https://www.gsi.go.jp/sokuchikijun/sankaku-genten.html そのデータはtz databaseに含まれるzone.tabにありますから、Windowsにもそれに相当する情報がインストールされているかもしれません。 https://github.com/eggert/tz/blob/2023c/zone.tab#L224 しかしおっしゃるように、どうやって情報を更新するのかという問題はありますね。 あと、そもそもタイムゾーン設定が実際の設置場所を表すのだろうかという問題があります。 例えば私が管理しているあるサーバは某サービスの日本国内のリージョンに置いてあるんですが、OSなどのタイムゾーンをJSTにすると世界の大多数のユーザには不自然なくらい時刻が偏ります。しかたがないのでUTCに設定して「レイキャビーク時間で運用します」とアナウンスしました。
guest

回答5

0

日本における「夏」の定義は気象庁の用語では 6 ~ 8 月となっていますが、冬至を基準にして一年を四分割するやり方で立夏から立秋までを夏とする定義も用いられています。 つまりひとつの文化圏内ですら分野によって定義が異なることもあるのです。

更に言えば文化によっては雨季と乾季だけで分けるような場合もあります (つまり「夏」の概念がない) し、暦でなく気象条件 (気温など) で定義することもあるかもしれません。

季節という概念そのものが世界中で一貫した定義で考えられるわけではないので誰もが納得できるような形では定義できません。 大雑把で良いのであれば質問者自身が期間を定めてその期間は夏ということにするしかないんじゃないでしょうか。

投稿2023/08/12 12:26

SaitoAtsushi

総合スコア5446

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

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

0

提示されている「前提」が不十分なのでこのままだとあなたがほしい回答は得られない可能性が高いです。1〜3の他にあなたが考えている暗黙の前提が有るはずです。それを示さないと。

なにが足りないかというと、どの様な状況でどの様に使うのか、がわからないです。
わかるのは一般権限でオフラインで使う、ということだけ。

「今が夏かどうか」を判断するには 「ここがどこで」「今が何月何日か」という情報が必要です。
後者はプログラムを動かしているコンピュータの内蔵タイマーを信じる ということで可能でしょう。
前者をどの様に規定するのか、が曖昧なので助言し難いのです。
「プログラムを動かしているコンピュータ」を置いてある場所?
「プログラムを動かしているコンピュータ」を置いてある場所には関わらず、指定した土地?
「6~9月が夏でも良い」のなら場所は気にしない?。

「プログラムを動かしているコンピュータを置いてある場所」でしたらコンピュータに設定されてるタイムゾーンが使えますが、それではだめ? JST+0900 などと表示されることが多いですが、JST の方。タイムゾーンと北半球か南半球かの一覧を用意しておく。
例えば、「今日本に置いてあり、ブラジルが夏かどうか知りたい」 ということでしたら 世界の国々の場所(南北半球のどちらかだけでよい?)を定数なりDBで持てばよい。ブラジル という情報は引数で与える。

投稿2023/08/13 00:14

編集2023/08/19 23:22
winterboum

総合スコア23349

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

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

0

質問者さんは「現在が夏であるかどうかを判定するアルゴリズム」を求めているのではないと思います。「6~9月が夏でも良い。」とおっしゃっていますから。

そうではなく、「現在が夏であるかどうかを返すAPIメソッド」を求めているのではないでしょうか。「IsSummerみたいなもの」が欲しいのでしょう。

そんなものはないです。

ですので、自分でプログラミングによって実現することを考えましょうか (そうしないと「プログラミングに関係ない質問」と注意を受けてしまいそうですし)。しかし、質問者さんの課した条件はなかなか厳しいです。

  • インターネットに接続されないため、NTP等でコンピュータの時刻を校正することができません。「特殊な権限が必要でないこと。」とのことなので、システム設定によって手動で時刻合わせすることもできないでしょう。つまり、現在がいつなのかを知ることができませんから、日時による季節判定は不可能です。

  • 他の基準で判定することを考えてみても、気温を計測する (サーバに温度センサが内蔵されていたとして) ことは「特殊な権限」にあたるでしょう (位置情報がだめなのですから)。日照なども同様ですし、そもそも対応するセンサ自体が搭載されていないかもしれません。

コンピュータは、与えられたデータに対してあらかじめ決められた処理を行なって予測可能な結果を返すだけの道具です。ご質問のように、何もしなくても都合のよい「お告げ」をしてくれる魔道具ではありません。

投稿2023/08/12 22:23

ikedas

総合スコア4337

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

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

0

簡易的ですが、こんなコードが役に立つかもしれません。

c#

1using System; 2 3class Program 4{ 5 static void Main(string[] args) 6 { 7 // 現在の日付を取得 8 DateTime currentDate = DateTime.Now; 9 10 // 現在の月を取得 11 int currentMonth = currentDate.Month; 12 13 // 夏の期間は6月から8月までです 14 if (currentMonth >= 6 && currentMonth <= 8) 15 { 16 Console.WriteLine("現在は夏です。"); 17 } 18 else 19 { 20 Console.WriteLine("現在は夏ではありません。"); 21 } 22 } 23} 24

投稿2023/08/15 06:01

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

今のロケールの考えに、季節はもちろん、北半球か南半球かという情報は無いし、それ以外に使えそうな情報は無いでしょうね。
タイムゾーンが+0900のような数値じゃなくてAsia/TokyoJSTのような文字列で設定されていることが取得できれば国名・地名から、季節のある北半球・南半球か、一年中夏か、とかは分かると思います。
サーバーOSに設定するタイムゾーンはUTCであるケースも多いし、国際企業ならもしかすると本社のタイムゾーンかも知れないので、タイムゾーン設定に頼るのは、あくまで、クライアントPCでしか有効でないでしょうね。
また、言語設定のja_JPen_USの後半のJPUSは国名を表しますが、言語設定は今いる場所とは一致しないのはご存じの通り。

なお、アメリカの夏時間切り替え制度を廃止して一年中夏時間にする法案が今年上院を全会一致で通過して、下院は時間切れで廃案。上院が全会一致なので、時間が足りていれば、おそらく下院でも可決されて、今年の11月の標準時間への切り替えが無くなり、夏時間が続く事になったはずです。いずれはそうなるでしょう。他に、すでに廃止済みの国もあり。アメリカが廃止すれば、さらに続く国も出てきそうに思います。

投稿2023/08/13 16:59

otn

総合スコア84571

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問