【问题标题】:How can I get the current date (w/o hour and minutes)?如何获取当前日期(没有小时和分钟)?
【发布时间】:2016-04-26 22:15:06
【问题描述】:

我在文档中只能看到DateTime.now(),但它也返回时间跨度,我只需要日期。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    核心库中没有类来模拟不带时间的日期。你必须使用new DateTime.now()

    请注意,日期取决于时区:巴黎的2016-01-20 02:00:00 与西雅图的2016-01-19 17:00:00 相同,但日期 不同。

    【讨论】:

      【解决方案2】:

      now 创建一个新日期,只包含您需要的部分:

      DateTime now = new DateTime.now();
      DateTime date = new DateTime(now.year, now.month, now.day);
      

      【讨论】:

        【解决方案3】:

        如果您只想要没有时间戳的日期。你可以借助 intl package。

        main() {
            var now = new DateTime.now();
            var formatter = new DateFormat('yyyy-MM-dd');
            String formattedDate = formatter.format(now);
            print(formattedDate); // 2016-01-25
        } 
        

        这需要 intl 包:

        dependencies:
          intl: ^0.16.1
        

        最后导入:

        import 'package:intl/intl.dart';
        

        【讨论】:

          【解决方案4】:

          如果您更喜欢更简洁的单行格式,根据 Günter Zöchbauer 的回答,您也可以这样写:

          DateTime dateToday = DateTime(DateTime.now().year, DateTime.now().month, DateTime.now().day) ; 
          

          虽然它会调用 3 次 DateTime.now(),但不需要额外的变量,尤其是在与 Dart 三元运算符一起使用或在 Flutter UI 代码块中使用时。

          【讨论】:

          • 我需要这个来避免使用额外的包,比如intl 谢谢!
          • 如果用户在午夜访问应用程序,调用 3 次可能会导致奇怪的错误。
          【解决方案5】:

          您可以使用 DateTime 类获取当前日期,并使用 DateFormat 格式化日期。

           final now = new DateTime.now();
           String formatter = DateFormat('yMd').format(now);// 28/03/2020
                      
          

          如果您想知道如何记住日期格式(DateFormat('yMd'))?那么 Flutter Docs 就是答案

          DateFormat class 允许用户从一组标准日期时间格式中进行选择,并在某些区域设置下指定自定义模式。 以下格式直接取自文档

          /// Examples Using the US Locale:
          ///      Pattern                         Result
          ///      ----------------                -------
                new DateFormat.yMd()             -> 7/10/1996
                new DateFormat('yMd')            -> 7/10/1996
                new DateFormat.yMMMMd('en_US')   -> July 10, 1996
                new DateFormat.jm()              -> 5:08 PM
                new DateFormat.yMd().add_jm()    -> 7/10/1996 5:08 PM
                new DateFormat.Hm()              -> 17:08 // force 24 hour time
          
          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
          

          希望这可以帮助您获取任何格式的日期。

          【讨论】:

            【解决方案6】:

            您可以在DateTime.now() 中使用day

            【讨论】:

              【解决方案7】:

              首先去 pub.dev 并获取 intl 包并将其添加到您的项目中。

              DateFormat.yMMMMd().format(你要渲染的日期。但必须是DateTime类型)

              【讨论】:

                【解决方案8】:

                使用这个

                import 'package:intl/intl.dart';
                
                
                getCurrentDate() {
                       return DateFormat('yyyy-MM-dd – kk:mm').format(DateTime.now());
                }
                

                【讨论】:

                  【解决方案9】:

                  这个不使用任何包(它将转换为字符串)

                    DateTime dateToday =new DateTime.now(); 
                    String date = dateToday.toString().substring(0,10);
                    print(date); // 2021-06-24
                  

                  【讨论】:

                    【解决方案10】:

                    您可以使用 DateFormat 将日期时间格式化为字符串

                    import 'package:intl/intl.dart';
                    
                    final DateFormat formatter = DateFormat('MM/dd/yyyy');
                    String createDate = formatter.format(DateTime.now());
                    

                    【讨论】:

                      【解决方案11】:

                      带有飞镖扩展

                      extension MyDateExtension on DateTime {
                        DateTime getDateOnly(){
                          return DateTime(this.year, this.month, this.day);
                        }
                      }
                      

                      用法:

                      DateTime now = DateTime.now(); // 30/09/2021 15:54:30
                      DateTime dateOnly = now.getDateOnly(); // 30/09/2021
                      

                      【讨论】:

                        【解决方案12】:

                        如果有人需要最简单的方式来格式化日期/时间,则无需插件:

                        var MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
                        
                        String formattedDateTime() {
                            DateTime now = new DateTime.now();
                            return now.day.toString()+" "+MONTHS[now.month-1]+" "+now.year.toString()+" "+now.hour.toString()+":"+now.minute.toString()+":"+now.second.toString();
                        }
                        

                        示例结果:2020 年 1 月 1 日 07:30:45

                        变化:

                        • MONTHS 数组以任何语言显示月份
                        • 根据需要返回字符串:仅显示日期、仅时间或日期 不同的格式(dd/mm/yyyy、dd-mm-yyyy、mm/dd/yyyy 等)

                        【讨论】:

                        • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 2011-04-24
                        • 1970-01-01
                        • 2013-12-20
                        • 1970-01-01
                        相关资源
                        最近更新 更多