Brian Oh
Brian Oh

Reputation: 10720

Flutter and Dart - how can I format an integer date in one line of code

How can I format an integer such as "20190331" to output as "2019-03-31" without firstly converting it to a date and without splitting it using substring. The date is stored as an integer in SQLite (SQFlite). I would like to do it in 1 line such as (pseudo code) Note: integer :

(pseudo) String sDate = fmt("####'-'##'-'##", map["DueDate"]); 

I know that I could do it such as :

String sDate = map["DueDate"].toString();
sDate = sDate.substring(0,4)+'-'+sDate.substring(4,6)+'-'+sDate.substring(6,8);

That however is two lines of code, and Visual Studio Code turns it into 8 lines when formatted and I like to keep my code compact.

Upvotes: 0

Views: 298

Answers (1)

Richard Heap
Richard Heap

Reputation: 51682

Write a function called fmt and call it as in your pseudo code.

String fmt(String f, int i) {
  StringBuffer sb = StringBuffer();
  RuneIterator format = RuneIterator(f);
  RuneIterator input = RuneIterator(i.toString());
  while (format.moveNext()) {
    var currentAsString = format.currentAsString;
    if (currentAsString == '#') {
      input.moveNext();
      sb.write(input.currentAsString);
    } else {
      sb.write(currentAsString);
    }
  }
  return sb.toString();
}

one line:

  print(fmt('####-##-##', 20190331));

Upvotes: 1

Related Questions