Skip to content

Commit 11754fa

Browse files
author
linzhijun
committed
修改
1 parent 06545a7 commit 11754fa

File tree

3 files changed

+27
-87
lines changed

3 files changed

+27
-87
lines changed

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

Lines changed: 25 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import org.joda.time.DateTimeZone;
55

66
import java.math.BigDecimal;
7+
import java.math.MathContext;
8+
import java.text.SimpleDateFormat;
79
import java.time.LocalDate;
810
import java.time.temporal.ChronoUnit;
911
import java.util.Date;
@@ -232,11 +234,16 @@ public String toString() {
232234
}
233235

234236
public String toString(String f) {
235-
return null;
236-
// if (Year == null) {
237-
// return ((DateTime) this).ToString(f);
238-
// }
239-
// return ((DateTime) this).ToString(f);
237+
Date date;
238+
if (Year != null && Year > 1900) {
239+
date = new Date(Year, Month, Day, Hour, Minute, Second);
240+
}else if (Day != null){
241+
date = new Date(1900, 1, Day, Hour, Minute, Second);
242+
}else{
243+
date = new Date(1900, 1, 0, Hour, Minute, Second);
244+
}
245+
SimpleDateFormat sd = new SimpleDateFormat(f);
246+
return sd.format(date);
240247
}
241248

242249
public DateTime ToDateTime() {
@@ -275,112 +282,45 @@ public MyDate AddSeconds(int d) {
275282
return new MyDate(ToDateTime().plusSeconds(d));
276283
}
277284

278-
// public static implicit operator
279-
280-
// Date(DateTime date) {
281-
// return new Date(date);
282-
// }
283-
284-
// public static implicit operator
285-
286-
// DateTime(Date date)
287-
// {
288-
// return new DateTime(date.Year ?? 0, date.Month ?? 0, date.Day ?? 0,
289-
// date.Hour, date.Minute, date.Second);
290-
// }
291-
292-
// public static implicit operator
293-
294-
// TimeSpan(Date date)
295-
// {
296-
// return new TimeSpan(date.Day ?? 0, date.Hour, date.Minute, date.Second);
297-
// }
298-
299-
// public static implicit operator
300-
301-
// Date(double days) {
302-
// var dt = DateTime.MinValue.AddDays((int) days);
303-
// if (dt.Year > 1900) {
304-
// dt = dt.AddSeconds((days - (int) days) * 24 * 60 * 60);
305-
// return new Date(dt);
306-
// }
307-
// var day = (int) days;
308-
// days = (days - day) * 24;
309-
// var hour = (int) days;
310-
// days = (days - hour) * 60;
311-
// var minute = (int) days * 24;
312-
// days = (days - minute) * 60;
313-
// var second = (int) days;
314-
// return new Date(new TimeSpan(day, hour, minute, second));
315-
// }
285+
public BigDecimal ToNumber() {
286+
BigDecimal result = new BigDecimal(Second).divide(new BigDecimal(60), MathContext.DECIMAL32);
287+
result = result.add(new BigDecimal(Minute)).divide(new BigDecimal(60), MathContext.DECIMAL32);
288+
result = result.add(new BigDecimal(Hour)).divide(new BigDecimal(24), MathContext.DECIMAL32);
316289

317-
public double ToNumber() {
318290
if (Year != null && Year > 1900) {
319291
LocalDate start = LocalDate.of(Year, Month, Day);
320292
LocalDate end = LocalDate.of(1900, 1, 1);
321293
long days = ChronoUnit.DAYS.between(end, start) + 2;
322-
return days + (Hour + (Minute + Second / 60.0) / 60) / 24;
294+
return result.add(new BigDecimal(days));
323295
}
324296
if (Day != null) {
325-
return Day + (Hour + (Minute + Second / 60.0) / 60) / 24;
297+
return result.add(new BigDecimal(Day));
326298
}
327-
return (Hour + (Minute + Second / 60.0) / 60) / 24;
299+
return result;
328300
}
329301

330-
// public static implicit operator double(
331-
// Date date)
332-
// {
333-
// if (date.Year > 1900) {
334-
// var dt = new DateTime((date.Year ?? 0), (date.Month ?? 0), (date.Day ?? 0),
335-
// date.Hour, date.Minute, date.Second);
336-
// double days = (double)(dt - DateTime.MinValue).TotalDays;
337-
// days += (date.Hour + (date.Minute + date.Second / 60.0) / 60) / 24;
338-
// return days;
339-
// }
340-
// return (date.Day ?? 0) + (date.Hour + (date.Minute + date.Second / 60.0) /
341-
// 60) / 24;
342-
// }
343-
344302
public MyDate ADD(MyDate num) {
345-
return new MyDate(this.ToNumber() + num.ToNumber());
346-
}
347-
348-
public MyDate ADD(Double num) {
349-
return new MyDate(this.ToNumber() + num);
303+
return new MyDate(this.ToNumber().add(num.ToNumber()));
350304
}
351305

352306
public MyDate SUB(MyDate num) {
353-
return new MyDate(this.ToNumber() - num.ToNumber());
354-
}
355-
356-
public MyDate SUB(Double num) {
357-
return new MyDate(this.ToNumber() - num);
358-
}
359-
360-
public MyDate MUL(Double num) {
361-
return new MyDate(this.ToNumber() * num);
307+
return new MyDate(this.ToNumber().subtract(num.ToNumber()));
362308
}
363309

364-
public MyDate DIV(Double num) {
365-
return new MyDate(this.ToNumber() / num);
366-
}
367-
368-
369310
public MyDate ADD(BigDecimal num) {
370-
return new MyDate(this.ToNumber() + num.doubleValue());
311+
return new MyDate(this.ToNumber().add(num));
371312
}
372313

373-
374314
public MyDate SUB(BigDecimal num) {
375-
return new MyDate(this.ToNumber() - num.doubleValue());
315+
return new MyDate(this.ToNumber().subtract(num));
376316
}
377317

378318
public MyDate MUL(BigDecimal num) {
379-
return new MyDate(this.ToNumber() * num.doubleValue());
319+
return new MyDate(this.ToNumber().multiply(num));
380320
}
381321

382322
public MyDate DIV(BigDecimal num) {
383-
return new MyDate(this.ToNumber() / num.doubleValue());
323+
return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32));
384324
}
385325

386326

java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ public Operand ToNumber(String errorMessage) {
282282

283283
@Override
284284
public Operand ToBoolean(String errorMessage) {
285-
return (((double) DateValue().ToNumber()) != 0) ? True : False;
285+
return ((DateValue().ToNumber().compareTo(new BigDecimal(0))) != 0) ? True : False;
286286
}
287287

288288
@Override

java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathVisitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2577,7 +2577,7 @@ public Operand visitDATEDIF_fun(final DATEDIF_funContext context) {
25772577
return Operand.Create((endDate.Year * 12 + endDate.Month - startDate.Year * 12 - startDate.Month - 1));
25782578
}
25792579
} else if (CharUtil.Equals(t, "d")) {
2580-
return Operand.Create((int) endDate.SUB(startDate).ToNumber());
2580+
return Operand.Create(endDate.SUB(startDate).ToNumber().intValue());
25812581
} else if (CharUtil.Equals(t, "yd")) {
25822582
int day = endDate.DayOfYear() - startDate.DayOfYear();
25832583
if (endDate.Year > startDate.Year && day < 0) {

0 commit comments

Comments
 (0)