Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting timestamp

Tags:

flutter

dart

I couldn't find a solution to this, I'm grabbing data from firebase and one of the fields is a timestamp which looks like this -> 1522129071. How to convert it to a date?

Swift example (works) :

func readTimestamp(timestamp: Int) {     let now = Date()     let dateFormatter = DateFormatter()     let date = Date(timeIntervalSince1970: Double(timestamp))     let components = Set<Calendar.Component>([.second, .minute, .hour, .day, .weekOfMonth])     let diff = Calendar.current.dateComponents(components, from: date, to: now)     var timeText = ""      dateFormatter.locale = .current     dateFormatter.dateFormat = "HH:mm a"      if diff.second! <= 0 || diff.second! > 0 && diff.minute! == 0 || diff.minute! > 0 && diff.hour! == 0 || diff.hour! > 0 && diff.day! == 0 {         timeText = dateFormatter.string(from: date)     }     if diff.day! > 0 && diff.weekOfMonth! == 0 {         timeText = (diff.day == 1) ? "\(diff.day!) DAY AGO" : "\(diff.day!) DAYS AGO"     }     if diff.weekOfMonth! > 0 {         timeText = (diff.weekOfMonth == 1) ? "\(diff.weekOfMonth!) WEEK AGO" : "\(diff.weekOfMonth!) WEEKS AGO"     }      return timeText } 

My attempt at Dart:

String readTimestamp(int timestamp) {     var now = new DateTime.now();     var format = new DateFormat('HH:mm a');     var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp);     var diff = date.difference(now);     var time = '';      if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {       time = format.format(date); // Doesn't get called when it should be     } else {       time = diff.inDays.toString() + 'DAYS AGO'; // Gets call and it's wrong date     }      return time; } 

And it returns dates/times that are waaaaaaay off.

UPDATE:

String readTimestamp(int timestamp) {     var now = new DateTime.now();     var format = new DateFormat('HH:mm a');     var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp * 1000);     var diff = date.difference(now);     var time = '';      if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {       time = format.format(date);     } else {       if (diff.inDays == 1) {         time = diff.inDays.toString() + 'DAY AGO';       } else {         time = diff.inDays.toString() + 'DAYS AGO';       }     }      return time;   } 
like image 722
Mohamed Mohamed Avatar asked May 31 '18 20:05

Mohamed Mohamed


People also ask

How do you convert timestamps to hours?

To convert time to a number of hours, multiply the time by 24, which is the number of hours in a day. To convert time to minutes, multiply the time by 1440, which is the number of minutes in a day (24*60). To convert time to seconds, multiply the time time by 86400, which is the number of seconds in a day (24*60*60 ).

How do you convert a number into a timestamp?

To convert a NUMBER to a TIMESTAMP you can use an expression like TO_TIMESTAMP(TO_CHAR(...)) . To compute the number of seconds between two timestamps, one solution is to cast both to dates, and substract them : you will get a (decimal) result in days, which can be then converted to seconds.


1 Answers

Your timestamp format is in fact in Seconds (Unix timestamp) as opposed to microseconds. If so the answer is as follows:

Change:

var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp); 

to

var date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000); 
like image 189
Alex Haslam Avatar answered Oct 08 '22 17:10

Alex Haslam