Fix wrong month numeration
[idea/community.git] / plugins / stats-collector / src / com / intellij / stats / personalization / impl / DayImpl.kt
1 /*
2  * Copyright 2000-2017 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.stats.personalization.impl
18
19 import com.intellij.stats.personalization.Day
20 import java.text.ParsePosition
21 import java.text.SimpleDateFormat
22 import java.util.*
23
24 /**
25  * @author Vitaliy.Bibaev
26  */
27 class DayImpl(date: Date) : Day {
28     override val dayOfMonth: Int
29     override val month: Int
30     override val year: Int
31
32     companion object {
33         private val DATE_FORMAT = SimpleDateFormat("dd-MM-yyyy")
34
35         fun fromString(str: String): Day? {
36             val position = ParsePosition(0)
37             val date = DATE_FORMAT.parse(str, position)
38             if (position.index == 0) return null
39             return DayImpl(date)
40         }
41     }
42
43     init {
44         val calendar = Calendar.getInstance()
45         calendar.time = date
46         dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH)
47         // a month is a zero-based property for some reason
48         // see details: https://stackoverflow.com/questions/344380/why-is-january-month-0-in-java-calendar
49         month = calendar.get(Calendar.MONTH) + 1
50         year = calendar.get(Calendar.YEAR)
51     }
52
53     override fun compareTo(other: Day): Int {
54         if (year == other.year) {
55             if (month == other.month) {
56                 return dayOfMonth.compareTo(other.dayOfMonth)
57             }
58             return month.compareTo(other.month)
59         }
60         return year.compareTo(other.year)
61     }
62
63     override fun hashCode(): Int {
64         return Objects.hash(year, month, dayOfMonth)
65     }
66
67     override fun equals(other: Any?): Boolean {
68         if (other != null && other is Day) return compareTo(other) == 0
69         return false
70     }
71
72     override fun toString(): String {
73         return "$dayOfMonth-$month-$year"
74     }
75 }