Skip to content

Commit b213d6e

Browse files
committed
修复 #27 bug
1 parent d23c6c4 commit b213d6e

File tree

5 files changed

+60
-6
lines changed

5 files changed

+60
-6
lines changed

csharp/ToolGood.Algorithm2.Test/Tests/IssuesTest.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,14 @@ public void issues_13()
3434
Assert.AreEqual(dt, 1275);
3535
}
3636

37+
38+
[Test]
39+
public void issues_27()
40+
{
41+
AlgorithmEngine engine = new AlgorithmEngine();
42+
var dt = engine.TryEvaluate("DATE(2024, 8, 1) + TIME(8, 0, 0)", DateTime.Now);
43+
Assert.AreEqual(dt, DateTime.Parse("2024-08-01 8:0"));
44+
}
45+
3746
}
3847
}

java/toolgood.algorithm/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>io.github.toolgood</groupId>
88
<artifactId>toolgood-algorithm</artifactId>
9-
<version>3.5.0.2</version>
9+
<version>3.5.0.3</version>
1010
<packaging>jar</packaging>
1111

1212
<name>toolgood.algorithm</name>

java/toolgood.algorithm/src/main/java/toolgood/algorithm/MyDate.java

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ public MyDate(BigDecimal num) {
7272
BigDecimal d = num.subtract(new BigDecimal(days));
7373
Hour = d.multiply(new BigDecimal(24)).intValue();
7474
Minute = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)).intValue();
75-
Second = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)).subtract(new BigDecimal(Minute)).multiply(new BigDecimal(60)).intValue();
75+
Second = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60))
76+
.subtract(new BigDecimal(Minute)).multiply(new BigDecimal(60)).intValue();
7677
// 防止秒数出错
7778
if (Second == 60) {
7879
Second = 0;
@@ -200,6 +201,7 @@ public String toString() {
200201
stringBuffer.append("0");
201202
}
202203
stringBuffer.append(Minute);
204+
stringBuffer.append(":");
203205
if (Second < 10) {
204206
stringBuffer.append("0");
205207
}
@@ -218,6 +220,7 @@ public String toString() {
218220
stringBuffer.append("0");
219221
}
220222
stringBuffer.append(Minute);
223+
stringBuffer.append(":");
221224
if (Second < 10) {
222225
stringBuffer.append("0");
223226
}
@@ -298,11 +301,37 @@ public BigDecimal ToNumber() {
298301
}
299302

300303
public MyDate ADD(MyDate num) {
301-
return new MyDate(this.ToNumber().add(num.ToNumber()));
304+
DateTime dt = this.ToDateTime();
305+
if (num.Year != null) {
306+
dt = dt.plusYears(num.Year);
307+
}
308+
if (num.Month != null) {
309+
dt = dt.plusMonths(num.Month);
310+
}
311+
if (num.Day != null) {
312+
dt = dt.plusDays(num.Day);
313+
}
314+
dt = dt.plusHours(num.Hour);
315+
dt = dt.plusMinutes(num.Minute);
316+
dt = dt.plusSeconds(num.Second);
317+
return new MyDate(dt);
302318
}
303319

304320
public MyDate SUB(MyDate num) {
305-
return new MyDate(this.ToNumber().subtract(num.ToNumber()));
321+
DateTime dt = this.ToDateTime();
322+
if (num.Year != null) {
323+
dt = dt.plusYears(-num.Year);
324+
}
325+
if (num.Month != null) {
326+
dt = dt.plusMonths(-num.Month);
327+
}
328+
if (num.Day != null) {
329+
dt = dt.plusDays(-num.Day);
330+
}
331+
dt = dt.plusHours(-num.Hour);
332+
dt = dt.plusMinutes(-num.Minute);
333+
dt = dt.plusSeconds(-num.Second);
334+
return new MyDate(dt);
306335
}
307336

308337
public MyDate ADD(BigDecimal num) {
@@ -321,5 +350,4 @@ public MyDate DIV(BigDecimal num) {
321350
return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32));
322351
}
323352

324-
325353
}

java/toolgood.algorithm/src/test/java/toolgood/algorithm/DemoApplication.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,15 @@
55

66
public class DemoApplication {
77
public static void main(String[] args) throws Exception {
8+
9+
AlgorithmEngine engine = new AlgorithmEngine();
10+
MyDate dt2 = engine.TryEvaluate("DATE(2024, 8, 1) + TIME(8, 0, 0)", MyDate.now());
11+
System.out.println(dt2);
12+
13+
MyDate dt3 = engine.TryEvaluate("DATE(2024, 8, 1,1,2,3)", MyDate.now());
14+
System.out.println(dt3);
15+
16+
817
AlgorithmEngine e=new AlgorithmEngine();
918
int c = e.TryEvaluate("2+3//eee", 0);
1019
int c2 = e.TryEvaluate("2+3 ee", 0);

java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/IssuesTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.junit.Test;
66

77
import toolgood.algorithm.AlgorithmEngine;
8+
import toolgood.algorithm.MyDate;
89

910
public class IssuesTest {
1011

@@ -22,12 +23,19 @@ public void issues_12() {
2223
assertEquals(num, 40576);
2324
}
2425

25-
@Test
2626
public void issues_13() {
2727
AlgorithmEngine engine = new AlgorithmEngine();
2828
int dt = engine.TryEvaluate("days360(date(2020,5,31),date(2023,12,15))", 0);
2929
assertEquals(dt, 1275);
3030

3131
}
3232

33+
@Test
34+
public void issues_27()
35+
{
36+
AlgorithmEngine engine = new AlgorithmEngine();
37+
MyDate dt = engine.TryEvaluate("DATE(2024, 8, 1) + TIME(8, 0, 0)", MyDate.now());
38+
assertEquals(dt.toString(), "2024-08-01 08:00:00");
39+
}
40+
3341
}

0 commit comments

Comments
 (0)