工具类——日期,今天、昨天、昨天之前以不同格式显示(Java&Dart)

Java代码实现:

/**
 * 根据传入的原始日期,获取截取后的消息日期。
 * 日期有三种显示形式,今天、昨天、昨天之前。
 * <p>
 * 例:今天是4月11号:
 * 若传入原始日期dateOriginal是"2018-09-03 12:32:40",则返回"2018-09-03 12:32",
 * 若传入原始日期dateOriginal是"2019-04-10 12:32:40",则返回"昨天12:32",
 * 若传入原始日期dateOriginal是"2019-04-11 12:32:40",则返回"12:32"。
 *
 * @param dateOriginal 原始日期
 * @return 返回截取后的日期
 */
public static String getMessageDate(String dateOriginal) {
    long original = 0;
    long oneDay = 1000 * 60 * 60 * 24;
    try {
        //拿到传过来的日期的毫秒值
        original = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateOriginal).getTime();
    } catch (ParseException e) {
        e.printStackTrace();
    }

    //设置一个日期表示今天零点
    Calendar today = Calendar.getInstance();
    today.set(Calendar.HOUR_OF_DAY, 0);
    today.set(Calendar.MINUTE, 0);
    today.set(Calendar.SECOND, 0);
    today.set(Calendar.MILLISECOND, 0);

    //与今天零点比较
    if (original >= today.getTimeInMillis()) {
        //今天
        return dateOriginal.substring(11, 16);
    } else {
        //与昨天零点比较
        if (original >= today.getTimeInMillis() - oneDay) {
            //昨天
            return "昨天" + dateOriginal.substring(11, 16);
        }
    }
    //都不是返回原始数据,去掉秒数
    return dateOriginal.substring(0, 16);
}

Dart实现:

///根据给定的日期得到format后的日期  /// 
  static String getDate(String dateOriginal) {
    //现在的日期
    var today = DateTime.now();
    //今天的23:59:59
    var standardDate = DateTime(today.year, today.month, today.day, 23, 59, 59);
    //传入的日期与今天的23:59:59秒进行比较
    Duration diff = standardDate.difference(DateTime.parse(dateOriginal));
    print('日期比较结果${diff.inDays}');
    if (diff < Duration(days: 1)) {
      //今天
      // 09:20
      return dateOriginal.substring(11, 16);
    } else if (diff >= Duration(days: 1) && diff < Duration(days: 2)) {
      //昨天
      //昨天09:20
      return "昨天 " + dateOriginal.substring(11, 16);
    } else {
      //昨天之前
      // 2019-01-23 09:20
      return dateOriginal.substring(0, 16);
    }
  }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Dart 线程池工具类的示例代码: ```dart import 'dart:collection'; import 'dart:async'; class ThreadPool { int _maxThreads; Queue<Function> _workQueue = Queue<Function>(); List<Worker> _workers = []; ThreadPool(this._maxThreads) { for (int i = 0; i < _maxThreads; i++) { _workers.add(Worker(_workQueue)); } } Future execute(Function task) async { Completer completer = Completer(); _workQueue.add(() async { await task(); completer.complete(); }); return completer.future; } void shutdown() { _workers.forEach((worker) => worker.stop()); } } class Worker { final Queue<Function> _workQueue; bool _isRunning = true; Worker(this._workQueue) { _start(); } void _start() async { while (_isRunning) { if (_workQueue.isNotEmpty) { var task = _workQueue.removeFirst(); await task(); } else { await Future.delayed(Duration(milliseconds: 100)); } } } void stop() { _isRunning = false; } } ``` 使用示例: ```dart void main() async { var threadPool = ThreadPool(2); await threadPool.execute(() async { print('Task 1 started'); await Future.delayed(Duration(seconds: 2)); print('Task 1 completed'); }); await threadPool.execute(() async { print('Task 2 started'); await Future.delayed(Duration(seconds: 1)); print('Task 2 completed'); }); await threadPool.execute(() async { print('Task 3 started'); await Future.delayed(Duration(seconds: 3)); print('Task 3 completed'); }); threadPool.shutdown(); } ``` 这个示例代码中,我们首先定义了一个 `ThreadPool` 类,它包含了一个任务队列 `_workQueue` 和一个线程池 `_workers`。在构造函数中,我们初始化了 `_workers` 数组并创建了若干个 `Worker` 实例,每个 `Worker` 实例都会从 `_workQueue` 中取出任务并执行。 `execute` 方法用于添加任务到队列中,它会返回一个 `Future` 对象,用于等待任务执行完成。 `Worker` 类是一个内部类,用于表示线程池中的一个工作者。它会持续地从任务队列中取出任务并执行,直到线程池被关闭。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值