27

I have a certain time in milliseconds (in a Timestamp object) and I want to use it to create a GregorianCalendar object. How can I do that?

EDIT: How do I do the reverse?

Amir Rachum
  • 76,817
  • 74
  • 166
  • 248

4 Answers4

47

To get a GregorianCalendar object and not a Calendar object. Like Michael's answer provides, you can also do the following:

long timestamp = 1234567890;
GregorianCalendar cal = new GregorianCalendar();
cal.setTimeInMillis(timestamp);

This assumes a UTC epoch timestamp.

Jacob van Lingen
  • 8,989
  • 7
  • 48
  • 78
haaduken
  • 629
  • 5
  • 12
45

Just get an instance of GregorianCalendar and setTime with your java.sql.Timestamp timestamp:

Calendar cal=GregorianCalendar.getInstance();
cal.setTime(timestamp);

Edit: As peterh pointed out, GregorianCalendar.getInstance() will not provide a GregorianCalendar by default, because it is inherited fromCalendar.getInstance(), which can provide for example a BuddhistCalendar on some installations. To be sure to use a GregorianCalender use new GregorianCalendar() instead.

Michael Konietzka
  • 5,419
  • 2
  • 28
  • 29
  • 2
    Odd as it may seem you are not guaranteed a `GregorianCalender` by calling `GregorianCalendar.getInstance()` as you do. Since the question is specifically about GregorianCalendar I think this answer is slightly incorrect. (haaduken's answer is more correct) – peterh Sep 10 '18 at 15:45
11
Timestamp timestamp = new Timestamp(23423434);
Calendar calendar = GregorianCalendar.getInstance();
calendar.setTimeInMillis(timestamp.getTime());
aepryus
  • 4,715
  • 5
  • 28
  • 41
  • it's worth noting that the setTimeInMillis(...) method is inherited from the Calendar class. Also, formatting the code in your answer would be helpful. :) – Riggy Dec 15 '10 at 13:27
  • so if you are setting time in timestamp and then getting, why create timestamp object at all? beats me – Kalpesh Soni Sep 12 '17 at 21:29
  • @KalpeshSoni "I have a certain time in milliseconds (in a Timestamp object)" - OP – aepryus Sep 12 '17 at 23:46
1

I believe this works, although it may not be the best approach:

import java.sql.Date;
import java.sql.Timestamp;
import java.util.GregorianCalendar;

public class TimestampToGregorianCalendar {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Timestamp t = new Timestamp(12356342); // replace with existing timestamp
        Date d = new Date(t.getTime());
        Calendar gregorianCalendar = GregorianCalendar.getInstance();
        gregorianCalendar.setTime(d);
    }

}
stark
  • 839
  • 5
  • 8