|
4 | 4 | import org.joda.time.DateTimeZone; |
5 | 5 |
|
6 | 6 | import java.math.BigDecimal; |
| 7 | +import java.math.MathContext; |
| 8 | +import java.text.SimpleDateFormat; |
7 | 9 | import java.time.LocalDate; |
8 | 10 | import java.time.temporal.ChronoUnit; |
9 | 11 | import java.util.Date; |
@@ -232,11 +234,16 @@ public String toString() { |
232 | 234 | } |
233 | 235 |
|
234 | 236 | 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); |
240 | 247 | } |
241 | 248 |
|
242 | 249 | public DateTime ToDateTime() { |
@@ -275,112 +282,45 @@ public MyDate AddSeconds(int d) { |
275 | 282 | return new MyDate(ToDateTime().plusSeconds(d)); |
276 | 283 | } |
277 | 284 |
|
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); |
316 | 289 |
|
317 | | - public double ToNumber() { |
318 | 290 | if (Year != null && Year > 1900) { |
319 | 291 | LocalDate start = LocalDate.of(Year, Month, Day); |
320 | 292 | LocalDate end = LocalDate.of(1900, 1, 1); |
321 | 293 | 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)); |
323 | 295 | } |
324 | 296 | if (Day != null) { |
325 | | - return Day + (Hour + (Minute + Second / 60.0) / 60) / 24; |
| 297 | + return result.add(new BigDecimal(Day)); |
326 | 298 | } |
327 | | - return (Hour + (Minute + Second / 60.0) / 60) / 24; |
| 299 | + return result; |
328 | 300 | } |
329 | 301 |
|
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 | | - |
344 | 302 | 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())); |
350 | 304 | } |
351 | 305 |
|
352 | 306 | 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())); |
362 | 308 | } |
363 | 309 |
|
364 | | - public MyDate DIV(Double num) { |
365 | | - return new MyDate(this.ToNumber() / num); |
366 | | - } |
367 | | - |
368 | | - |
369 | 310 | public MyDate ADD(BigDecimal num) { |
370 | | - return new MyDate(this.ToNumber() + num.doubleValue()); |
| 311 | + return new MyDate(this.ToNumber().add(num)); |
371 | 312 | } |
372 | 313 |
|
373 | | - |
374 | 314 | public MyDate SUB(BigDecimal num) { |
375 | | - return new MyDate(this.ToNumber() - num.doubleValue()); |
| 315 | + return new MyDate(this.ToNumber().subtract(num)); |
376 | 316 | } |
377 | 317 |
|
378 | 318 | public MyDate MUL(BigDecimal num) { |
379 | | - return new MyDate(this.ToNumber() * num.doubleValue()); |
| 319 | + return new MyDate(this.ToNumber().multiply(num)); |
380 | 320 | } |
381 | 321 |
|
382 | 322 | public MyDate DIV(BigDecimal num) { |
383 | | - return new MyDate(this.ToNumber() / num.doubleValue()); |
| 323 | + return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); |
384 | 324 | } |
385 | 325 |
|
386 | 326 |
|
|
0 commit comments