Dart 根据当前年份和第几周获取该周的开始和结束日期

2023-10-27

最近遇到一个需求,计算当前年份有多少周,网上查阅了资料得到以下计算方式:

/// Calculates number of weeks for a given year as per https://en.wikipedia.org/wiki/ISO_week_date#Weeks_per_year
  /// 一年的最后一周(等于说就是一年总共多少周)
  static int numOfWeeks(int year) {
    DateTime dec28 = DateTime(year, 12, 28);
    int dayOfDec28 = int.parse(DateFormat("D").format(dec28));
    return ((dayOfDec28 - dec28.weekday + 10) / 7).floor();
  }

  /// Calculates week number from a date as per https://en.wikipedia.org/wiki/ISO_week_date#Calculation
  /// 当前日期在当年度的第几周
  static int weekNumber(DateTime date) {
    int dayOfYear = int.parse(DateFormat("D").format(date));
    int woy = ((dayOfYear - date.weekday + 10) / 7).floor();
    if (woy < 1) {
      woy = numOfWeeks(date.year - 1);
    } else if (woy > numOfWeeks(date.year)) {
      woy = 1;
    }
    return woy;
  }

那么问题就来了,后续用到的时候需要将这个周当前序号还原成开始和结束的日期,想了半天最后用时间戳的方式将其转换回来:

  /// 根据year年的第week周,查询本周的开始和截止日期
  static void weekToDayFormat(int year, int week) {
    int dayMills = 24 * 60 * 60 * 1000;
    int weekMills = 7 * dayMills;
    DateTime dateTime = DateTime(year, 1, 4);
    int targetTimeStamp =
        dateTime.millisecondsSinceEpoch + (week * 7 - dateTime.weekday) * dayMills;
    print('start :${DateTime.fromMillisecondsSinceEpoch(targetTimeStamp - weekMills + dayMills)}');
    print('end :${DateTime.fromMillisecondsSinceEpoch(targetTimeStamp + dayMills - 1)}');

    // flutter: target week start day:2021-03-15 00:00:00.000
    // flutter: target week end day:2021-03-21 23:59:59.999
  }

其中,最先得到周的最后一天的0点0分,倒推7天后,因为是从0点0分开始的,所以要加上1天的时间。完整的一周就是从2021-03-15 00:00:00.000 到 2021-03-21 23:59:59.999,超过1毫秒就跑到下周去了。

至于每年开始的第一周和每年末尾的最后一周算法我参考的https://en.wikipedia.org/wiki/ISO_week_date  上面有公式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart 根据当前年份和第几周获取该周的开始和结束日期 的相关文章

  • 当用户尝试使用 flutter_inappwebview 在移动应用程序中上传文件时,如何请求用户权限?

    我正在尝试使用 flutter inappwebviewplugin 创建一个 flutter web 应用程序 在应用程序中 我添加了一个用于文件上传的 dropzone 插件 此功能在浏览器和 Android 应用程序上都运行良好 但在
  • 显示菜单位置 Flutter

    我有一个 GridView 小部件 其中包含一些用 GestureDetector 包裹的 GridTiles 当我长按它时 尝试显示一个菜单以删除 GridTile 一切都很好 除了我希望从我拥有的点开始显示该菜单点击的不是应用程序的顶部
  • 对于哪些 flutter 小部件我们需要使用 const?

    我了解的好处const并且小部件不会在状态更改时重建 但当您看到下面的代码时 仍然很明显它们是常量 我希望 flutter 自动处理它 或者 flutter 已经在处理它而我却没有意识到 This makes sense to me but
  • Dart:快照与 AOT

    我正在搜索很多关于这种伟大语言的信息 并找到了这个页面https github com dart lang sdk wiki Snapshots https github com dart lang sdk wiki Snapshots但它
  • Flutter:未捕获的 ReferenceError:firebase 未定义

    我在 Flutter Web 应用程序中使用 Firebase 服务 但在加载 Firebase 脚本时遇到问题 当我使用扑动时运行 d chrome我看到有错误的空白页面 重新加载页面后加载正常 当我进行 flutter build we
  • 颤振文本小部件仅显示最后一个条目

    我正在尝试在 flutter 中创建日历 目前我正在实施这些活动 为了测试这一点 我创建了一个方法来检查当前日期 即创建行的时间 是否有事件 如果是这种情况 则会在表示内容的容器中打印 x 整个事情只是第一次测试 看它是否在原则上有效 当我
  • Flutter:从子级检索顶级状态返回 null

    我正在尝试使用 of 方法获取应用程序的顶级状态 类似于 Scaffold of 函数 这是 精简的 代码 class IApp extends StatefulWidget override IAppState createState g
  • 快捷栏持续时间和高度

    我正在尝试展示一个小吃店 当我点击手势检测器后 这个小吃有两个按钮 问题是小吃栏出现几秒钟然后消失 所以我有两个问题 如何阻止小吃栏消失 直到用户采取行动并单击按钮 此外 小吃栏具有整个屏幕的高度 如何使其在屏幕底部具有特定高度 您可以使用
  • 渲染时 Flutter SVG 延迟

    我在行中显示 SVG 文件形式的图像和文本 由于某些原因 svg 图像的渲染速度比屏幕的其余部分慢 从而导致延迟 这不利于用户体验 这种延迟正常吗 我该怎么做才能使整个屏幕同时渲染 Row mainAxisAlignment MainAxi
  • 如何使用 Firebase_Auth 和 Flutter 登录 Twitter

    一个人应该如何编程使用 Twitter 登录特征使用firebase auth https pub dev packages firebase auth和颤动 我看到一些使用的例子flutter twitter login https pu
  • 如何在列表视图中滚动添加更多项目?

    这里的代码当前加载了存储在 Firestore 集合中的所有啤酒 我如何最初只加载 10 个啤酒 然后当用户向下滚动并到达 10 个啤酒列表的末尾时 它应该加载最后一次酿造后还有 10 杯 并且酿造应根据时间戳进行排序 class Brew
  • 如何根据有效(@mentions)和所有主题标签更改文本颜色?

    我想在文本中用不同颜色显示主题标签和有效提及 我得到了这段代码的帮助 该代码仅适用于主题标签 RichText convertHashtag String text List
  • Google Dart:.where() 函数如何工作?

    var fruits apples oranges bananas fruits 0 apples fruits add pears fruits length 4 fruits where f gt f startsWith a toLi
  • 在 Flutter 中使用 Expansion Tile 和 ListView

    我正在尝试从此构建应用程序image https i stack imgur com gJNkO png 但是当我将 ListView 与此扩展图块放在同一页面中时 屏幕变为空 I added shrinkwrap true并工作了 但现在
  • 使用 Visual Studio Code 在 Flutter 上运行 Gradle 时出错

    我正在使用 Windows 10 Visual Studio Code 我尝试在编写代码后运行我的代码 这就是它之后向我展示的内容 在调试模式下在 TECNO Camon CX 上启动 lib main dart 运行 Gradle 时出错
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • Flutter:构造函数中 List 参数的默认分配

    在定义构造函数时 是否可以将常量值分配给数据类型 List 的可选参数 例如 class sample final int x final List
  • 如何在颤动中从图像选择器中裁剪图像?

    我想允许用户裁剪他从图像选择器中选择的图像并保存它 类似于在 Whatsapp 上上传个人资料图片 我怎样才能在颤振中做到这一点 示例图片 您可以使用这2个flutter库来实现这一点 图像选择器 图像裁剪器 图像选择器使用iOS和Andr
  • Flutter Web 平台检查

    我正在尝试找到一种方法来查看我的 flutter web 项目正在哪个平台 iOS 或 Android 上运行 当我使用if Platform isIOS do something 我面临以下错误 Error Unsupported ope
  • 空安全 AppLocalization 字符串的最佳方法

    Question 我在用AppLocalizations of context myString在我的 null safe flutter 应用程序中国际化字符串 我的 IDE 告诉我AppLocalizations of context

随机推荐