obj-c 实现java System.currentTimeMillis()

本文介绍如何使用Swift编程语言将日期时间从UNIX时间戳转换为人类可读的格式,并通过实例演示了时间转换的过程及输出方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
time *=1000.0;
long long dTime = [[NSNumber numberWithDouble:time] longLongValue]; // 将double转为long long型
NSString *curTime = [NSString stringWithFormat:@"%llu",dTime]; // 输出long long型
NSLog(@"---------time:%@",curTime);

接下来,我将从代码实现的角度来为大家详细的解析Handler-Looper-MessageQueue模型 Message.java package MyMessage; import MyHandler.Handler; public class Message { public int what; public Object obj; public Handler target; public long when; public Message next; } MessageQueue.java package MyMessageQueue; import MyMessage.Message; public class MessageQueue { private Message head; // 入队方法; public synchronized void enqueueMessage(Message msg, long delayMillis) { msg.when = System.currentTimeMillis() + delayMillis; // 空队列 或 新的最早消息; if (head == null || msg.when < head.when) { msg.next = head; head = msg; notify(); return; } Message p = head; while (p.next != null && p.next.when <= msg.when) { p = p.next; } msg.next = p.next; p.next = msg; } // 出队方法; public synchronized Message next() { for (;;) { long now = System.currentTimeMillis(); if (head == null) { waitUninterruptibly(0); continue; } long diff = head.when - now; if (diff <= 0) { Message m = head; head = m.next; m.next = null; return m; } waitUninterruptibly(diff); } } private void waitUninterruptibly(long millis) { boolean interrupted = false; try { while (true) { try { if (millis == 0) { wait(); } else { wait(millis); } return; } catch (InterruptedException e) { interrupted = true; } } } finally { if (interrupted) Thread.currentThread().interrupt(); } } } Hander.java package MyHandler; import MyLooper.Looper; import MyMessage.Message; import MyMessageQueue.MessageQueue; public class Handler { private final Looper mLooper; private final MessageQueue mQueue; public Handler() { this(Looper.myLooper()); } public Handler(Looper looper) { if (looper == null) throw new RuntimeException("Can't create Handler inside thread without Looper"); mLooper = looper; mQueue = looper.mQueue; } public void sendMessage(Message msg) { msg.target = this; mQueue.enqueueMessage(msg, 0); } public void sendMessageDelayed(Message msg, long delayMillis) { msg.target = this; mQueue.enqueueMessage(msg, delayMillis); } public void post(Runnable r) { Message m = new Message(); m.obj = r; sendMessage(m); } public void dispatchMessage(Message msg) { if (msg.obj instanceof Runnable) { ((Runnable) msg.obj).run(); } else { handleMessage(msg); } } public void handleMessage(Message msg) { } } Looper.java package MyLooper; import MyMessage.Message; import MyMessageQueue.MessageQueue; public class Looper { private static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<>(); public final MessageQueue mQueue; private Looper() { mQueue = new MessageQueue(); } public static void prepare() { if (sThreadLocal.get() != null) { throw new IllegalStateException("Only one Looper per thread"); } sThreadLocal.set(new Looper()); } public static Looper myLooper() { return sThreadLocal.get(); } public static void loop() { Looper me = myLooper(); if (me == null) throw new IllegalStateException("No Looper; call prepare() first"); for (;;) { try { Message msg = me.mQueue.next(); if (msg == null) continue; msg.target.dispatchMessage(msg); } catch (Exception e) { Thread.currentThread().interrupt(); break; } } } } Demo.java import MyLooper.Looper; import MyMessage.Message; import MyHandler.Handler; public class Demo { public static void main(String[] args) { // 创建并启动工作线程 new WorkerThread("WorkerThread").start(); // 给主线程一点时间确保工作线程初始化完成 try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } // 主线程发送消息 System.out.println("MainThread: 准备发送消息"); WorkerThread.handler.sendMessage(WorkerThread.obtainMessage(1, "普通消息")); WorkerThread.handler.sendMessageDelayed(WorkerThread.obtainMessage(2, "延迟消息"), 3000); WorkerThread.handler.post(() -> System.out.println("WorkerThread: 执行Runnable任务 - " + Thread.currentThread().getName()) ); System.out.println("MainThread: 所有消息已发送"); } } class WorkerThread extends Thread { public static Handler handler; // 静态便于主线程访问 public WorkerThread(String name) { super(name); } @Override public void run() { // 初始化Looper和Handler Looper.prepare(); handler = new Handler() { @Override public void handleMessage(Message msg) { // 处理消息 System.out.println(getName() + ": 收到消息 - what=" + msg.what + ", obj=" + msg.obj); } }; System.out.println(getName() + ": Looper已准备, 等待消息..."); Looper.loop(); // 开始消息循环 } // 辅助方法创建消息 public static Message obtainMessage(int what, Object obj) { Message msg = new Message(); msg.what = what; msg.obj = obj; return msg; } }
最新发布
08-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值