Skip to content

Commit bd9ebb5

Browse files
committed
v2.4.3 更新 DateTimeHelper.GetDateTimeOffsetFromXml() 方法
1 parent 1efd978 commit bd9ebb5

File tree

4 files changed

+87
-13
lines changed

4 files changed

+87
-13
lines changed

src/Senparc.CO2NET.Tests/Extensions/RequestExtensionTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Microsoft.AspNetCore.Http;
2-
using Microsoft.AspNetCore.Http.Internal;
32
using Microsoft.Extensions.Primitives;
43
using Microsoft.VisualStudio.TestTools.UnitTesting;
54
using Moq;

src/Senparc.CO2NET.Tests/Helpers/DateTimeHelperTests.cs

Lines changed: 74 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public void GetDateTimeFromXmlTest()
1919
Console.WriteLine(result);
2020

2121
var timeStrToString = "2018/12/27 13:20:11";//ToString 之后结果会不一样
22-
Console.WriteLine(result.ToString());
23-
Assert.AreEqual(timeStrToString, result.ToString());
22+
Console.WriteLine(result.ToString("yyyy/MM/dd HH:mm:ss"));
23+
Assert.AreEqual(timeStrToString, result.ToString("yyyy/MM/dd HH:mm:ss"));
2424
}
2525
}
2626

@@ -32,26 +32,91 @@ public void GetDateTimeOffsetFromXmlTest()
3232
var result = DateTimeHelper.GetDateTimeOffsetFromXml(timeTicks);
3333
var timeStr = "12/27/2018 13:20:11 +08:00";//直接打印出来的结果
3434
Console.WriteLine(result);
35-
Console.WriteLine(result+"");
35+
Console.WriteLine(result + "");
3636
Console.WriteLine(result.ToString());
3737
Console.WriteLine(result.Date.ToString());
3838
Console.WriteLine(result.DateTime.ToString());
3939
Console.WriteLine(result.LocalDateTime.ToString());
4040
var timeStrTostring = "2018/12/27 13:20:11 +08:00";//不是用ToString()返回结果不一致
41-
Assert.AreEqual(timeStrTostring, result.ToString());
41+
Assert.AreEqual(timeStrTostring, result.ToString("yyyy/MM/dd HH:mm:ss zzz"));
4242

4343
Console.WriteLine("==============");
4444
var localTimeStr = "2018/12/27 13:20:11";
45-
Console.WriteLine(result.LocalDateTime) ;
46-
Assert.AreEqual(localTimeStr, result.LocalDateTime.ToString());
45+
Console.WriteLine(result.LocalDateTime);
46+
Assert.AreEqual(localTimeStr, result.LocalDateTime.ToString("yyyy/MM/dd HH:mm:ss"));
4747
Console.WriteLine(result.DateTime);
48-
Assert.AreEqual(localTimeStr, result.DateTime.ToString());
48+
Assert.AreEqual(localTimeStr, result.DateTime.ToString("yyyy/MM/dd HH:mm:ss"));
49+
}
50+
}
4951

52+
[TestMethod]
53+
public void GetDateTimeOffsetFromXml_ShouldReturnCorrectDateTime()
54+
{
55+
// Arrange
56+
long unixTimeStamp = 1545888011; // Unix 时间戳
57+
DateTimeOffset expectedDateTime = new DateTimeOffset(2018, 12, 27, 13, 20, 11, TimeSpan.FromHours(8)); // 预期的中国标准时间
5058

59+
// Act
60+
DateTimeOffset actualDateTime = DateTimeHelper.GetDateTimeOffsetFromXml(unixTimeStamp);
5161

52-
//Assert.AreEqual(timeStr, result);
62+
// Assert
63+
Assert.AreEqual(expectedDateTime, actualDateTime);
64+
}
5365

54-
}
66+
[TestMethod]
67+
public void GetDateTimeOffsetFromXml_ShouldHandleEpochStart()
68+
{
69+
// Arrange
70+
long unixTimeStamp = 0;
71+
DateTimeOffset expectedDateTime = new DateTimeOffset(1970, 1, 1, 8, 0, 0, TimeSpan.FromHours(8)); // +8时区
72+
73+
// Act
74+
DateTimeOffset actualDateTime = DateTimeHelper.GetDateTimeOffsetFromXml(unixTimeStamp);
75+
76+
// Assert
77+
Assert.AreEqual(expectedDateTime, actualDateTime);
78+
}
79+
80+
[TestMethod]
81+
public void GetDateTimeOffsetFromXml_ShouldReturnCorrectDateTime_UTC()
82+
{
83+
// Arrange
84+
long unixTimeStamp = 1545888011; // Unix 时间戳
85+
DateTimeOffset expectedDateTime = new DateTimeOffset(2018, 12, 27, 5, 20, 11, TimeSpan.Zero); // 预期的 UTC 时间
86+
87+
// Act
88+
DateTimeOffset actualDateTime = DateTimeHelper.GetDateTimeOffsetFromXml(unixTimeStamp, "UTC");
89+
90+
// Assert
91+
Assert.AreEqual(expectedDateTime, actualDateTime);
92+
}
93+
94+
[TestMethod]
95+
public void GetDateTimeOffsetFromXml_ShouldReturnCorrectDateTime_EasternStandardTime()
96+
{
97+
// Arrange
98+
long unixTimeStamp = 1545888011; // Unix 时间戳
99+
DateTimeOffset expectedDateTime = new DateTimeOffset(2018, 12, 27, 0, 20, 11, TimeSpan.FromHours(-5)); // 预期的美国东部标准时间
100+
101+
// Act
102+
DateTimeOffset actualDateTime = DateTimeHelper.GetDateTimeOffsetFromXml(unixTimeStamp, "Eastern Standard Time");
103+
104+
// Assert
105+
Assert.AreEqual(expectedDateTime, actualDateTime);
106+
}
107+
108+
[TestMethod]
109+
public void GetDateTimeOffsetFromXml_ShouldReturnCorrectDateTime_PacificStandardTime()
110+
{
111+
// Arrange
112+
long unixTimeStamp = 1545888011; // Unix 时间戳
113+
DateTimeOffset expectedDateTime = new DateTimeOffset(2018, 12, 26, 21, 20, 11, TimeSpan.FromHours(-8)); // 预期的美国太平洋标准时间
114+
115+
// Act
116+
DateTimeOffset actualDateTime = DateTimeHelper.GetDateTimeOffsetFromXml(unixTimeStamp, "Pacific Standard Time");
117+
118+
// Assert
119+
Assert.AreEqual(expectedDateTime, actualDateTime);
55120
}
56121
}
57122

src/Senparc.CO2NET/Helpers/DateTimeHelper.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ and limitations under the License.
5050
修改标识:Senparc - 20230326
5151
修改描述:v2.0.5 添加 WaitingFor() 方法
5252
53+
修改标识:Senparc - 20240728
54+
修改描述:v2.4.3 优化 GetDateTimeOffsetFromXml 方法,增加 timezoneId 参数
55+
5356
----------------------------------------------------------------*/
5457

5558

@@ -93,11 +96,17 @@ public static DateTime GetDateTimeFromXml(string dateTimeFromXml)
9396
/// </summary>
9497
/// <param name="dateTimeFromXml">微信DateTime</param>
9598
/// <returns></returns>
96-
public static DateTimeOffset GetDateTimeOffsetFromXml(long dateTimeFromXml)
99+
public static DateTimeOffset GetDateTimeOffsetFromXml(long dateTimeFromXml, string timezoneId = "China Standard Time")
97100
{
98-
return BaseTime.AddSeconds(dateTimeFromXml).ToLocalTime();
101+
DateTimeOffset utcDateTime = BaseTime.AddSeconds(dateTimeFromXml);
102+
Console.WriteLine($"UTC Time: {utcDateTime}");
103+
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById(timezoneId);
104+
DateTimeOffset localDateTime = TimeZoneInfo.ConvertTime(utcDateTime, timeZone);
105+
Console.WriteLine($"Local Time ({timezoneId}): {localDateTime}");
106+
return localDateTime;
99107
}
100108

109+
101110
/// <summary>
102111
/// 转换微信DateTimeOffset时间到C#时间
103112
/// </summary>

src/Senparc.CO2NET/Senparc.CO2NET.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22
<PropertyGroup>
33
<TargetFrameworks>net462;netstandard2.0;netstandard2.1</TargetFrameworks>
4-
<Version>2.4.2</Version>
4+
<Version>2.4.3</Version>
55
<LangVersion>8.0</LangVersion>
66
<AssemblyName>Senparc.CO2NET</AssemblyName>
77
<RootNamespace>Senparc.CO2NET</RootNamespace>
@@ -140,6 +140,7 @@
140140
v2.4.0 添加 SenparcDI.GetService&lt;T&gt;()、SenparcDI.GetRequiredService&lt;T&gt;()、SenparcDI.GetRequreidKeyedService()方法
141141
v2.4.1 SenparcDI.GetServiceProvider() 方法添加 refresh 参数
142142
v2.4.2 添加 ReflectionHelper.HasParameterlessConstructor() 方法
143+
v2.4.3 更新 DateTimeHelper.GetDateTimeOffsetFromXml() 方法
143144
</PackageReleaseNotes>
144145
<RepositoryUrl>https://github.com/Senparc/Senparc.CO2NET</RepositoryUrl>
145146
<Configurations>Debug;Release;Test</Configurations>

0 commit comments

Comments
 (0)