Skip to content

Commit 6383ab8

Browse files
committed
修正溢位問題
1 parent 6067055 commit 6383ab8

File tree

4 files changed

+72
-10
lines changed

4 files changed

+72
-10
lines changed

src/TaiwanUtilities/RocDateTime/RocDateTime.cs

+8-6
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ private DateTimeOffset GetRawValue()
4949
/// <summary>
5050
/// 民國年。此值範圍為 1 至 999,若要判斷是否為民國前需使用 <see cref="BeforeEra"/> 屬性判斷。
5151
/// </summary>
52-
public int Year => YearConversion.EraToMinguo(GetRawValue().Year, BeforeEra);
52+
public int Year => YearConversion.EraToMinguo(GetRawValue().Year);
5353
public int Month => GetRawValue().Month;
5454
public int Day => GetRawValue().Day;
5555
public int Hour => GetRawValue().Hour;
@@ -172,16 +172,18 @@ private static class YearConversion
172172

173173
private const int EraYearOffset = 1911;
174174

175-
public static int EraToMinguo(int eraYear, bool beforeEra)
175+
public static int EraToMinguo(int eraYear)
176176
{
177-
return eraYear - EraYearOffset + (beforeEra ? 1 : 0);
177+
var value = eraYear > EraYearOffset
178+
? eraYear - EraYearOffset
179+
: 1 + EraYearOffset - eraYear;
180+
return value;
178181
}
179182
public static int MinguoToEra(int minGuoYear)
180183
{
181184
// 民國前一年為 1911, 民國一(元)年為 1912
182-
return minGuoYear + EraYearOffset + (minGuoYear < 0 ? 1 : 0); ;
183-
184-
185+
var value = minGuoYear + EraYearOffset + (minGuoYear < 1 ? 1 : 0);
186+
return value;
185187
}
186188

187189

src/TaiwanUtilities/TaiwanUtilities.csproj

+3-3
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@
2727
<!-- Pack Settings -->
2828
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2929
<PackageReadmeFile>README.md</PackageReadmeFile>
30-
<PackageTags>Taiwan,Utilities,Decimal,Chinese,Parser,Converter,InternationalNumericFormatter,RocDateTime</PackageTags>
31-
<PackageVersion>1.0.1</PackageVersion>
32-
<!--<PackageVersion>1.0.1-alpha.1</PackageVersion>-->
30+
<PackageTags>Taiwan,Utilities,ChineseDecimal,ChineseNumeric,Numeric,Parser,Converter,InternationalNumericFormatter,RocDateTime</PackageTags>
31+
<PackageVersion>1.0.2</PackageVersion>
32+
<!--<PackageVersion>1.0.3-alpha.1</PackageVersion>-->
3333

3434
<!-- Source Link Settings-->
3535
<PublishRepositoryUrl>true</PublishRepositoryUrl>

test/TaiwanUtilities.UnitTests/RocDateTime/RocDateTimeTest.cs

+59
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,63 @@ public static void 國定假日判斷()
2020
{
2121
Assert.True(RocDateTime.Parse("114/1/1").IsHoliday);
2222
}
23+
24+
[Fact]
25+
public static void 年份轉換測試()
26+
{
27+
Assert.Equal(
28+
expected: RocDateTime.Era.AddYears(-2),
29+
actual: new RocDateTime(-2, 1, 1));
30+
31+
Assert.Equal(
32+
expected: RocDateTime.Era.AddYears(-1),
33+
actual: new RocDateTime(-1, 1, 1));
34+
35+
Assert.Equal(
36+
expected: RocDateTime.Era,
37+
actual: new RocDateTime(0, 1, 1));
38+
39+
Assert.Equal(
40+
expected: RocDateTime.Era,
41+
actual: new RocDateTime(1, 1, 1));
42+
43+
Assert.Equal(
44+
expected: RocDateTime.Era.AddYears(+1),
45+
actual: new RocDateTime(2, 1, 1));
46+
47+
Assert.Equal(
48+
expected: RocDateTime.Era.AddYears(+2),
49+
actual: new RocDateTime(3, 1, 1));
50+
51+
52+
var _1913 = RocDateTime.Era.AddYears(+1);
53+
Assert.Equal(
54+
expected: _1913.Year,
55+
actual: 2);
56+
Assert.False(_1913.BeforeEra);
57+
58+
var _1912 = RocDateTime.Era.AddYears(+0);
59+
Assert.Equal(
60+
expected: _1912.Year,
61+
actual: 1);
62+
Assert.False(_1912.BeforeEra);
63+
64+
var _1911 = RocDateTime.Era.AddYears(-1);
65+
Assert.Equal(
66+
expected: _1911.Year,
67+
actual: 1);
68+
Assert.True(_1911.BeforeEra);
69+
70+
var _1910 = RocDateTime.Era.AddYears(-2);
71+
Assert.Equal(
72+
expected: _1910.Year,
73+
actual: 2);
74+
Assert.True(_1910.BeforeEra);
75+
76+
var _1909 = RocDateTime.Era.AddYears(-3);
77+
Assert.Equal(
78+
expected: _1909.Year,
79+
actual: 3);
80+
Assert.True(_1909.BeforeEra);
81+
}
2382
}

test/TaiwanUtilities.UnitTests/TaiwanUtilities.UnitTests.csproj

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
<PropertyGroup>
44
<TargetFramework>net6</TargetFramework>
5-
<IsPackable>false</IsPackable>
5+
<IsPackable>false</IsPackable>
6+
<OutputType>Library</OutputType>
67
</PropertyGroup>
78

89

0 commit comments

Comments
 (0)