WindowsC#通过 *** 作系统(而不是IP地址)检测用户的半球?

WindowsC#通过 *** 作系统(而不是IP地址)检测用户的半球?,第1张

概述Windows / C#通过 *** 作系统(而不是IP地址)检测用户的半球

我有一个C#.Net(4.0)应用程序,我想根据季节做一些逻辑。 这个应用程序将被北半球和南半球的人使用,可能或不可能在连接到互联网的机器上。

另一个SO用户在这里也提出了类似的问题,这让我可以根据机器的本地时区信息来寻求解决scheme。 JavaScript到C#的“端口”大致如下所示:

TimeZoneInfo tzi = TimeZoneInfo.Local; TimeSpan january = tzi.GetUtcOffset(new DateTime(System.DateTime.Now.Year,1,1)); TimeSpan july = tzi.GetUtcOffset(new DateTime(System.DateTime.Now.Year,7,1)); TimeSpan diff = january - july; if (diff.TotalDays > 0) { Console.Writeline(tzi.displayname + " is in the Southern hemisphere"); } else { Console.Writeline(tzi.displayname + " is in the northern hemisphere"); }

我的机器的时区恰好在北半球,正确输出:

(UTC-06:00)中部时间(美国和加拿大)位于北半球

如何asynchronous打开windows中的文件

DPAPI – 为另一个用户encryption?

禁用交换(分页文件)以确保一切都在内存中

如何判断列表框中的内容

为什么System.Environment.Machinename值是大写的?

如果我换掉这一行:

TimeZoneInfo tzi = TimeZoneInfo.Local;

我知道在南半球有一个时区,它也看起来很有希望:

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneByID("Cen. Australia Standard Time");

输出:

(UTC+09:30) AdelaIDe is in the Southern hemisphere

到现在为止还挺好。 但是这个技巧只有在timezoneinfo遵守夏令时的情况下才有效。 这导致:

> (UTC+09:30) AdelaIDe is in the Southern hemisphere > (UTC+09:30) Darwin is in the northern hemisphere > (UTC+10:00) Brisbane is in the northern hemisphere > (UTC+10:00) Canberra,Melbourne,Sydney is in the Southern hemisphere

我想我可以蛮力强制timezoneinfo /string的静态字典和硬编码所有,但我希望有一个更优雅的方式。

将最后一行添加到文件中的最简洁/最简单的方法

Mono上的跨平台高分辨率计时器?

如何触发已经运行的基于.net的windows应用程序?

什么是SystemResourceNotifyWindow?

如何安装同一个windows服务的多个实例

如果可用,一个好的方法可能是使用地理定位。 这将为您连接到互联网的用户带来好的结果。 对于没有连接到互联网的用户,您的时区解决方案将运行良好。 不幸的是,我想你将不得不做一个静态词典来处理不使用夏令时的时区。

时区有时是出于任意的政治原因而设置的,这使得很难以完全一致的方式使用这些区域。

总结

以上是内存溢出为你收集整理的Windows / C#通过 *** 作系统(而不是IP地址)检测用户的半球?全部内容,希望文章能够帮你解决Windows / C#通过 *** 作系统(而不是IP地址)检测用户的半球?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1279367.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存