从现在的“白天”或“夜晚”类型中获取时间

本文关键字:类型 获取 取时间 夜晚 白天 | 更新日期: 2023-09-27 18:27:45

是否可以获取当前位置的时间类型-->白天或晚上。例如,我现在在保加利亚,时间是下午2:14或上午10:20,这意味着现在是白天。什么时候是凌晨2点14分或晚上11点20分是夜晚。是在.NET中有方法谁在计算机上得到位置并且告诉现在是晚上,还是白天。

编辑:需要澄清的是:夜晚从何时看到日落开始,到何时看到日出结束。

从现在的“白天”或“夜晚”类型中获取时间

BCL中没有任何内容会直接返回日落/日出值。结果取决于地球上的实际位置,而不是DateTime文化。

也就是说,所有的数学难题都已经写好了,所以你可以用合适的C#来翻译现有的算法。

例如,参见带有纬度/经度的C#日出/日落

这在一定程度上取决于你白天和晚上的称呼。

如果您在给定位置定义夜晚=日落和日出之间,请考虑使用Nuget软件包太阳能计算器。这使得计算成为"简单的通信"

项目网站示例:

芝加哥日出

using System;
using Innovative.SolarCalculator;
// ***
// *** Geo coordinates of Oak Street Beach in Chicago, IL
// ***
// *** NOTE: the .Date is not necessary but is included to demonstrate that time input 
// *** does not affect the output. Time will be returned in the current time zone so it 
// *** will need to be adjusted to the time zone where the coordinates are from (there 
// *** are services that can be used to get time zone from a latitude and longitude position).
// ***
TimeZoneInfo cst = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
SolarTimes solarTimes = new SolarTimes(DateTime.Now.Date, 41.9032, -87.6224);
DateTime sunrise = TimeZoneInfo.ConvertTimeFromUtc (solarTimes.Sunrise.ToUniversalTime(), cst);
// ***
// *** Display the sunrise
// ***
Console.WriteLine ("View the sunrise across Lake Michigan from Oak Street Beach in Chicago at {0} on {1}.", sunrise.ToLongTimeString(), sunrise.ToLongDateString());

密歇根州日落

// ***
// *** Geo coordinates of Benton Harbor/Benton Heights in Michigan
// ***
TimeZoneInfo est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");              
SolarTimes solarTimes = new SolarTimes(DateTime.Now, 42.1543, -86.4459);
DateTime sunset = TimeZoneInfo.ConvertTimeFromUtc(solarTimes.Sunset.ToUniversalTime(), est);
// ***
// *** Display the sunset
// ***
Console.WriteLine("View the sunset across Lake Michigan from Benton Harbor Michigan at {0} on {1}.", sunset.ToLongTimeString(), sunset.ToLongDateString());

我知道这是旧的,但你真的应该签出CoordinateSharp。它可以通过Nuget获得,而且非常容易使用。

示例

//Coordinate Lat, Long, Date
Coordinate c = new Coordinate(25,35,DateTime.Now);
c.CelestialInfo.IsSunUp; //Returns Boolean