首页 > 编程语言 >Java 时间戳 获取当前时间 可读格式

Java 时间戳 获取当前时间 可读格式

时间:2024-10-26 12:45:05浏览次数:3  
标签:Java java MM dd System yyyy 时间 import 格式

学习笔记

1. 时间戳的定义

在 Java 中,时间戳通常表示自1970年1月1日00:00:00 UTC以来的毫秒数。Java 提供了多种方式来处理时间戳。

2. 获取当前时间戳

你可以使用 System.currentTimeMillis() 方法来获取当前的时间戳(以毫秒为单位)。

long timestampMillis = System.currentTimeMillis(); // 获取当前时间的毫秒时间戳

如果你需要以秒为单位,可以将其除以1000:

long timestampSeconds = timestampMillis / 1000; // 转换为秒

 

3. 使用 java.time 包(Java 8及以上)

Java 8 引入了新的日期时间 API,推荐使用 java.time 包来处理日期和时间。

获取当前时间戳
import java.time.Instant;

Instant now = Instant.now(); // 获取当前时间戳
long timestampMillis = now.toEpochMilli(); // 毫秒
long timestampSeconds = now.getEpochSecond(); // 秒

 

4. 转换时间戳为可读日期

你可以将时间戳转换为可读的日期格式,通常使用 java.text.SimpleDateFormatjava.time.format.DateTimeFormatter

使用 SimpleDateFormat
import java.text.SimpleDateFormat;
import java.util.Date;

long timestamp = System.currentTimeMillis();
Date date = new Date(timestamp);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 打印可读的日期格式

使用 DateTimeFormatter

import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

long timestamp = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(timestamp);
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    .withZone(ZoneId.systemDefault())
    .format(instant);
System.out.println(formattedDate); // 打印可读的日期格式

1. 使用 SimpleDateFormat

SimpleDateFormat 是用于格式化和解析日期的类。常用的格式化字符串包括:

  • "yyyy-MM-dd": 年-月-日(例如:2024-10-26)
  • "yyyy/MM/dd": 年/月/日(例如:2024/10/26)
  • "dd-MM-yyyy": 日-月-年(例如:26-10-2024)
  • "HH:mm": 时:分:秒(24小时制,例如:14:30:45)
  • "hh:mma": 时:分:秒 AM/PM(12小时制,例如:02:30:45 PM)
  • "yyyy-MM-dd HH:mm": 年-月-日 时:分:秒(例如:2024-10-26 14:30:45)
  • "yyyy/MM/dd HH:mm": 年/月/日 时:分:秒
import java.text.SimpleDateFormat;
import java.util.Date;

long timestamp = System.currentTimeMillis();
Date date = new Date(timestamp);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = sdf.format(date);
System.out.println(formattedDate); // 输出:2024-10-26 14:30:45

2. 使用 DateTimeFormatter

从 Java 8 开始,引入了新的日期时间 API,使用 DateTimeFormatter 更加灵活和强大。

常用的格式包括:

  • "yyyy-MM-dd"
  • "yyyy/MM/dd"
  • "dd-MM-yyyy"
  • "HH:mm"
  • "hh:mma"
  • "yyyy-MM-dd HH:mm"
  • "yyyy/MM/dd HH:mm"
  • "yyyy-MM-dd'T'HH:mm.SSS'Z'": ISO 8601 格式(例如:2024-10-26T14:30:45.123Z)
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;

long timestamp = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(timestamp);
String formattedDate = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
    .withZone(ZoneId.systemDefault())
    .format(instant);
System.out.println(formattedDate); // 输出:2024-10-26 14:30:45

3. 自定义格式

你可以根据需要自定义日期格式,以下是一些常用符号及其含义:

  • y: 年
  • M: 月(1-12或01-12)
  • d: 日(1-31)
  • H: 小时(0-23)
  • h: 小时(1-12)
  • m: 分钟(0-59)
  • s: 秒(0-59)
  • a: AM/PM标识

 

5. 实际应用示例

1. 日志记录

在应用程序中记录事件的发生时间。

public void logEvent(String event) {
    long timestamp = System.currentTimeMillis();
    System.out.println("Event: " + event + " at " + timestamp);
}

2. 计算时间差

测量某个操作执行的时间。

public void measureOperationTime() {
    long startTime = System.currentTimeMillis();
    
    // 执行某个操作
    performOperation();
    
    long endTime = System.currentTimeMillis();
    long duration = endTime - startTime;
    System.out.println("Operation took " + duration + " milliseconds.");
}

private void performOperation() {
    // 模拟操作
    try {
        Thread.sleep(200); // 暂停200毫秒
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

3. 定时任务

使用时间戳来设置定时任务。

import java.util.Timer;
import java.util.TimerTask;

public class ScheduledTask {
    public void scheduleTask(long delay) {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("Task executed at: " + System.currentTimeMillis());
            }
        }, delay); // 延迟执行
    }
}

 

6. 注意事项

  • 时区:处理时间戳时,通常使用 UTC。在将其转换为可读格式时,请注意时区问题。
  • 精度:根据需求选择合适的时间戳精度(毫秒或秒)。
  • 线程安全:在多线程环境中处理时间戳时,需要确保线程安全,特别是在记录日志时。

标签:Java,java,MM,dd,System,yyyy,时间,import,格式
From: https://blog.csdn.net/2402_85226471/article/details/143252032

相关文章

  • Java面试真题之中级进阶(线程,进程,序列化,IO流,NIO)
    前言本来想着给自己放松一下,刷刷博客,慕然回首,线程、程序、进程?Java序列化?Java中IO流?JavaIO与NIO的区别(补充)?似乎有点模糊了,那就大概看一下Java基础面试题吧。好记性不如烂键盘***12万字的java面试题整理***简述线程、程序、进程的基本概念。以及他们之间关系是什......
  • Java学习-答题判断程序1-3
    1.前言(1)答题判题程序-1题目:设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。知识点总结1.基本语法与结构:学习和应用Java的基本语法,类的定义与实例化。理解如何使用控制流(如循环和条件语句)。2.数据封装与类设......
  • 详解Java之Spring MVC篇一
     目录SpringMVC官方介绍MVCRequestMapping传递参数 无参数单个参数针对String类型 针对Integer类型针对int类型针对自定义类型多个参数参数重命名参数强制一致参数不强制一致传递数组​编辑传递List​编辑传递JSON​编辑从路径中获取参数获取单个......
  • 【老白学Java】- 工欲善其事,必先利其器
    [老白学java]-工欲善其事,必先利其器最近很闲,于是我瞄上了Java。女儿苦苦劝我趁早放弃…最终她放弃了,却彻底激发了我的学习热情!本着「不撞南墙撞北墙」的无畏精神,重新装备上我的老搭档“SONYFZ-15”,毅然决然的开启了Java修炼之旅。郑重声明:本人新入坑的老白,如......
  • java+vue计算机毕设电商平台日志分析系统的设计与实现【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和电子商务行业的蓬勃兴起,电商平台已成为现代商业活动的重要组成部分。这些平台每天产生大量的用户行为数据、交易记录以及......
  • 【Java知识】Java进阶-服务发现机制SPI
    文章目录SPI概述SPI工作原理ServiceLoader代码展示简化的`ServiceLoader`类关键点解释使用示例1.定义服务接口2.实现服务提供者3.配置文件4.加载服务提供者总结SPI使用场景1.数据库驱动2.日志框架3.图像处理4.加密算法5.插件系统6.缓存机制示例代码1.定......
  • java+vue计算机毕设多企业人力资源集成平台【开题+程序+论文+源码】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着全球经济一体化的加速发展,企业间的竞争日益激烈,人力资源作为企业的核心竞争力之一,其管理效率与质量直接关系到企业的生存与发展。当前,众多企业在......
  • 如何使用NTP同步时间?
    ​一、NTP通信概述很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作。但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为了开发者要解决的重要问题。对于Cat.1模块,移动/电信卡,通常会下发基站时间,那么sntp就不是必要的,而联通卡通常......
  • 老白学 Java - 工欲善其事,必先利其器
    [老白学java]-工欲善其事,必先利其器最近很闲,于是我瞄上了Java。女儿苦苦劝我趁早放弃...最终她放弃了,却彻底激发了我的学习热情!本着「不撞南墙撞北墙」的无畏精神,重新装备上我的老搭档"SONYFZ-15",毅然决然的开启了Java修炼之旅。郑重声明:本人新入坑的老白,如果文中有......
  • LLM-Mixer: 融合多尺度时间序列分解与预训练模型,可以精准捕捉短期波动与长期趋势
    近年来,大型语言模型(LargeLanguageModels,LLMs)在自然语言处理领域取得了显著进展。受此启发,研究人员开始探索将LLMs应用于时间序列预测任务的可能性。由于时间序列数据与文本数据在特征上存在显著差异,直接将LLMs应用于时间序列预测仍面临诸多挑战。为了解决这一问题,Jin等......