다트로 날짜를 어떻게 형식화합니까?


141

인스턴스가 DateTime있고 문자열로 형식을 지정하고 싶습니다. 어떻게합니까? 날짜를 "2013-04-20"과 같은 문자열로 바꾸고 싶습니다.

답변:


298

intl패키지 를 사용할 수 있습니다 ( 설치 프로그램 )를 날짜를 형식화 .

의 경우 en_US형식은 매우 간단합니다 :

import 'package:intl/intl.dart';

main() {
  final DateTime now = DateTime.now();
  final DateFormat formatter = DateFormat('yyyy-MM-dd');
  final String formatted = formatter.format(now);
  print(formatted); // something like 2013-04-20
}

포맷팅에는 많은 옵션이 있습니다. 문서에서 :

ICU Name                   Skeleton
--------                   --------
DAY                          d
ABBR_WEEKDAY                 E
WEEKDAY                      EEEE
ABBR_STANDALONE_MONTH        LLL
STANDALONE_MONTH             LLLL
NUM_MONTH                    M
NUM_MONTH_DAY                Md
NUM_MONTH_WEEKDAY_DAY        MEd
ABBR_MONTH                   MMM
ABBR_MONTH_DAY               MMMd
ABBR_MONTH_WEEKDAY_DAY       MMMEd
MONTH                        MMMM
MONTH_DAY                    MMMMd
MONTH_WEEKDAY_DAY            MMMMEEEEd
ABBR_QUARTER                 QQQ
QUARTER                      QQQQ
YEAR                         y
YEAR_NUM_MONTH               yM
YEAR_NUM_MONTH_DAY           yMd
YEAR_NUM_MONTH_WEEKDAY_DAY   yMEd
YEAR_ABBR_MONTH              yMMM
YEAR_ABBR_MONTH_DAY          yMMMd
YEAR_ABBR_MONTH_WEEKDAY_DAY  yMMMEd
YEAR_MONTH                   yMMMM
YEAR_MONTH_DAY               yMMMMd
YEAR_MONTH_WEEKDAY_DAY       yMMMMEEEEd
YEAR_ABBR_QUARTER            yQQQ
YEAR_QUARTER                 yQQQQ
HOUR24                       H
HOUR24_MINUTE                Hm
HOUR24_MINUTE_SECOND         Hms
HOUR                         j
HOUR_MINUTE                  jm
HOUR_MINUTE_SECOND           jms
HOUR_MINUTE_GENERIC_TZ       jmv
HOUR_MINUTE_TZ               jmz
HOUR_GENERIC_TZ              jv
HOUR_TZ                      jz
MINUTE                       m
MINUTE_SECOND                ms
SECOND                       s

en_US날짜가 아닌 경우 로케일에 명시 적으로로드해야합니다. 자세한 내용은 DateFormat문서 를 참조하십시오. date_symbol_data_local.dart좀 더 심도있게 보려면 각 국가 / 언어의 모든 형식 이 포함되어 있습니다.


국제 전화가 고장 났습니까? 캐치되지 않는 오류 : FileSystemException : 파일을 열 수 없습니다, 경로 = 'E : \ 다트 \ WS \ 웹 \ 패키지 \ 국제 \ intl.dart'(OS 오류 : 시스템 경로 지정 찾을 수 없습니다.
javapadawan

1
형식에 밀리 초를 추가하는 방법이 있습니까?
Kaspi December

2
pubspec.yaml 의존성이 필요합니다 : intl : ^ 0.15.7
murt

우리는 어떻게 만 달을 가져올 수 있습니까? 1 월 1 일, 2 월 2 일 ...? DateFormat ( 'MM'). format (DateTime.now ())를 시도했습니다. 설레다에서 작동하지 않습니다. 당신의 제안을 공유하십시오.
Kamlesh

@Kaspi는 분수 초 'S'를 시도
badelectron77

32

이것도 작동합니다 :

DateTime today = new DateTime.now();
String dateSlug ="${today.year.toString()}-${today.month.toString().padLeft(2,'0')}-${today.day.toString().padLeft(2,'0')}";
print(dateSlug);


13

누군가 문자열 형식의 날짜를 다른 문자열 형식으로 변환하려면 먼저 DateTime.parse ( "2019-09-30")를 사용하고 DateFormat ( "date pattern"). format ()에 전달하십시오.

dateFormate = DateFormat("dd-MM-yyyy").format(DateTime.parse("2019-09-30"));

참조 : Dart-yyyy-MM-dd에있는 간단한 날짜 문자열의 형식을 dd-MM-yyyy로 변경하는 방법


1
코드는 사용 DateFormat하지만 텍스트는DateTime.format()
mFeinstein

죄송합니다! 실수. 변경 :)
Shashank

11

[ "오늘", "어제", "요일"등의 소셜 네트워크와 같은 날짜를 제공합니다.]

void main() {
      DateTime now = new DateTime(2018,6,26);
      print(date(now));
    }
    
    String date(DateTime tm) {
      DateTime today = new DateTime.now();
      Duration oneDay = new Duration(days: 1);
      Duration twoDay = new Duration(days: 2);
      Duration oneWeek = new Duration(days: 7);
      String month;
      switch (tm.month) {
        case 1:
          month = "january";
          break;
        case 2:
          month = "february";
          break;
        case 3:
          month = "march";
          break;
        case 4:
          month = "april";
          break;
        case 5:
          month = "may";
          break;
        case 6:
          month = "june";
          break;
        case 7:
          month = "july";
          break;
        case 8:
          month = "august";
          break;
        case 9:
          month = "september";
          break;
        case 10:
          month = "october";
          break;
        case 11:
          month = "november";
          break;
        case 12:
          month = "december";
          break;
      }
    
      Duration difference = today.difference(tm);
    
      if (difference.compareTo(oneDay) < 1) {
        return "today";
      } else if (difference.compareTo(twoDay) < 1) {
        return "yesterday";
      } else if (difference.compareTo(oneWeek) < 1) {
        switch (tm.weekday) {
          case 1:
            return "monday";
          case 2:
            return "tuesday";
          case 3:
            return "wednesday";
          case 4:
            return "thursday";
          case 5:
            return "friday";
          case 6:
            return "saturday";
          case 7:
            return "sunday";
        }
      } else if (tm.year == today.year) {
        return '${tm.day} $month';
      } else {
        return '${tm.day} $month ${tm.year}';
      }
    }

1
매우 유용합니다-감사합니다. 시간이있는 날짜를 전달하는 경우 메소드 맨 위에이 추가 행을 추가하십시오. 그렇지 않으면 '어제'가 작동하지 않을 수 있습니다. tm = DateTime (tm.year, tm.month, tm.day);
Nick Wright

8

date_format 패키지가 있습니다

dependencies:
    date_format:

암호

import 'package:date_format/date_format.dart';

final formattedStr = formatDate(
    yourDateTime, [dd, '.', mm, '.', yy, ' ', HH, ':', nn]);

// output example "29.03.19 07:00"

주의 : 분은 nn입니다

패키지로 연결


2

pubspec.yaml :

dependencies:
  intl:

main.dart :

import 'package:intl/intl.dart'; // for date format
import 'package:intl/date_symbol_data_local.dart'; // for other locales

void main() {
  var now = DateTime.now();
  print(DateFormat().format(now)); // This will return date using the default locale
  print(DateFormat('yyyy-MM-dd hh:mm:ss').format(now));
  print(DateFormat.yMMMMd().format(now)); // print long date 
  print(DateFormat.yMd().format(now)); // print short date 
  print(DateFormat.jms().format(now)); // print time 

  initializeDateFormatting('es'); // This will initialize Spanish locale
  print(DateFormat.yMMMMd('es').format(now)); // print long date in Spanish format
  print(DateFormat.yMd('es').format(now)); // print short date in Spanish format
  print(DateFormat.jms('es').format(now)); // print time in Spanish format
}

결과:

May 31, 2020 5:41:42 PM
2020-05-31 05:41:42
May 31, 2020
5/31/2020
5:41:42 PM
31 de mayo de 2020
31/5/2020
17:41:42

1

여러 날짜 형식을 하나로 결합하려는 경우을 사용하여이 작업을 수행 할 수 있습니다 intl.

DateFormat('yMMMd').addPattern(DateFormat.HOUR24_MINUTE).format(yourDateTime))


0

문자열에서 DateTime까지 매년 분기를 처리하는 동안 적절한 해결책을 찾지 못했기 때문에 다음과 같이했습니다.

    List<String> dateAsList = 'Q1 2001'.split(' ');
    DateTime dateTime = DateTime.now();
    String quarter = dateAsList[0];
    int year = int.parse(dateAsList[1]);
    switch(quarter) {
      case "Q1": dateTime = DateTime(year, 1);
      break;
      case "Q2": dateTime = DateTime(year, 4);
      break;
      case "Q3": dateTime = DateTime(year, 7);
      break;
      case "Q4": dateTime = DateTime(year, 10);
      break;
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.