fork download
  1. /tmp $ cat Main.java
  2. import java.util.Calendar;
  3.  
  4. import org.joda.time.DateTime;
  5. import org.joda.time.DateTimeFieldType;
  6. import org.joda.time.DateTimeField;
  7. import org.joda.time.DateTimeZone;
  8. import org.joda.time.MutableDateTime;
  9. import org.joda.time.chrono.GregorianChronology;
  10.  
  11. interface MillisToYear {
  12. int year(long millis);
  13. }
  14.  
  15. class CalendarMillisToYear implements MillisToYear {
  16. private final Calendar cal = Calendar.getInstance();
  17.  
  18. @Override
  19. public int year(final long millis) {
  20. cal.setTimeInMillis(millis);
  21. return cal.get(Calendar.YEAR);
  22. }
  23. }
  24.  
  25. class JodaMillisToYear implements MillisToYear {
  26. private final DateTimeFieldType year = DateTimeFieldType.year();
  27.  
  28. @Override
  29. public int year(final long millis) {
  30. return new DateTime(millis).get(year);
  31. }
  32. }
  33.  
  34. class MutableJodaMillisToYear implements MillisToYear {
  35. private final DateTimeFieldType year = DateTimeFieldType.year();
  36. private final MutableDateTime date = new MutableDateTime();
  37.  
  38. @Override
  39. public int year(final long millis) {
  40. date.setMillis(millis);
  41. return date.get(year);
  42. }
  43. }
  44.  
  45. class DirectJodaMillisToYear implements MillisToYear {
  46. private final DateTimeZone timezone = DateTimeZone.getDefault();
  47. private final DateTimeField year =
  48. GregorianChronology.getInstanceUTC().year();
  49.  
  50. @Override
  51. public int year(long millis) {
  52. millis = timezone.convertUTCToLocal(millis);
  53. return year.get(millis);
  54. }
  55. }
  56.  
  57. public class Main {
  58. public static void main(final String... args) {
  59.  
  60. System.out.println("Total time: " + DateTimeFormatter.parseDateTime(""););
  61. }
  62. }
  63.  
  64. /tmp $ javac -cp joda-time-2.0.jar Main.java
  65. /tmp $ java -cp joda-time-2.0.jar:. Main 0
  66. Total time: 793
  67. Checksum: 20142065600
  68. /tmp $ java -cp joda-time-2.0.jar:. Main 1
  69. Total time: 394
  70. Checksum: 20142065600
  71. /tmp $ java -cp joda-time-2.0.jar:. Main 2
  72. Total time: 421
  73. Checksum: 20142065600
  74. /tmp $ java -cp joda-time-2.0.jar:. Main 3
  75. Total time: 156
  76. Checksum: 20142065600
  77. /tmp $ cat year.go
  78. package main
  79.  
  80. import (
  81. "fmt"
  82. "time"
  83. )
  84.  
  85. func main() {
  86. var unixTime int64 = time.Now().Unix() / 86400 * 86400
  87. start := time.Now()
  88. var chksum int64 = 0
  89.  
  90. for i := 0; i < 10000000; i++ {
  91. chksum += int64(time.Unix((unixTime + int64(i)), 0).Year())
  92. }
  93. total := time.Now().Sub(start)
  94. fmt.Printf("Total: %v\n", total)
  95. fmt.Printf("Checksum: %v\n", chksum);
  96. }
  97. /tmp $ go run year.go
  98. Total: 699.872908ms
  99. Checksum: 20142062000
  100.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty