-
解析美国东部时间与北京时间相互转换的实现代码
美国东部时间在UTC-5时区,北京时间是UTC+8时区,正常情况下美东时间比北京时间晚13个小时。需要注意的是美国有夏令时,而北京没有夏令时,美国夏令时时会让时间快一个小时,让人民早起早睡,所以在美国实行夏令时时美东时间比北京时间晚12个小时。
逻辑如上所述,代码如下
复制代码代码如下:
/// <summary>
/// AMESTime 的摘要说明:
/// 美东时间的转换
///
/// 美东时间在UTC-5时区,美国有夏时制,即在夏令时启用之后美东时间比起所在时区早一个小时,即UTC-4
/// 在未使用夏令时时美东时间比北京时间(UTC+8时区)晚13个小时,在启用夏令时时美东时间比北京时间晚12个小时
///
///
/// 美国国会2005年通过的能源法案,夏令时时段:从2007年开始每年3月的第二个星期日开始夏令时,结束日期为11月的第一个星期日。
/// </summary>
public class AMESTime
{
private static DateTime _thisYearDaylightSavingTimeStart,
_thisYearDaylightSavingTimeEnd;
private const int TIMEZONE_OFFSET_DAY_SAVING_LIGHT = -12;
private const int TIMEZONE_OFFSET = -13;
public static DateTime BeijingTimeToAMESTime(DateTime beijingTime)
{
int offsetHours = (IsNowAMESDayLightSavingTime ? TIMEZONE_OFFSET_DAY_SAVING_LIGHT:TIMEZONE_OFFSET);
return beijingTime.AddHours(offsetHours);
}
public static DateTime AMESNow
{
get
{
return BeijingTimeToAMESTime(DateTime.Now);
}
}
/// <summary>
/// 判断当前日期是否是美国夏令时
/// 从2007年开始每年3月的第二个星期日开始夏令时,结束日期为11月的第一个星期日。
/// </summary>
/// <returns>是,返回true,否则为false</returns>
public static bool IsNowAMESDayLightSavingTime
{
get
{
return DateTime.UtcNow > DayLightSavingStartTimeUtc
&& DateTime.UtcNow < DayLightSavingEndTimeUtc;
}
}
/// <summary>
/// 夏令时开始时间
/// </summary>
static DateTime DayLightSavingStartTimeUtc
{
get
{
if(_thisYearDaylightSavingTimeStart.Year != DateTime.Now.Year)
{
DateTime temp = new DateTime(DateTime.Now.Year,3,8,0,0,0);
while(temp.DayOfWeek != DayOfWeek.Sunday)
{
temp = temp.AddDays(1);
}
_thisYearDaylightSavingTimeStart = temp.AddHours(TIMEZONE_OFFSET);
}
return _thisYearDaylightSavingTimeStart;
}
}
/// <summary>
/// 夏令时结束时间
/// </summary>
static DateTime DayLightSavingEndTimeUtc
{
get
{
if(_thisYearDaylightSavingTimeEnd.Year != DateTime.Now.Year)
{
DateTime temp = new DateTime(DateTime.Now.Year,11,1,0,0,0);
while(temp.DayOfWeek != DayOfWeek.Sunday)
{
temp = temp.AddDays(1);
}
_thisYearDaylightSavingTimeEnd = temp.AddHours(TIMEZONE_OFFSET_DAY_SAVING_LIGHT);
}
return _thisYearDaylightSavingTimeEnd;
}
}
}
来源:https://www.jb51.net/article/37057.htm
栏目列表
最新更新
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
Java使用poi生成word文档的简单实例
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比