java之路——日期与数字的详解与应用方面

简介: java之路——日期与数字的详解与应用方面

9fc194235cb8491d9e70c093a252ad19.png


一、日期转换为数字


1. Date


Date 是 Java 标准库中的一个类,提供了处理日期和时间的功能。

getTime(): 返回自 1970 年 1 月 1 日 00:00:00 GMT 起到此 Date 对象表示的日期和时间之间的毫秒数。

Date date = new Date();
long timestamp = date.getTime();


toString(): 将 Date 对象转换为字符串,格式为 EEE MMM dd HH:mm:ss zzz yyyy。

Date date = new Date();
String dateString = date.toString();
Mon May 04 09:51:52 CDT 2013


获取当前日期和时间:

Date currentDate = new Date();
System.out.println("Current Date and Time: " + currentDate);


比较日期

Date date1 = new Date(); // 当前日期和时间
Date date2 = new Date(1624185600000L); // 2021-06-20 00:00:00
if (date1.equals(date2)) {
    System.out.println("Dates are equal.");
} else if (date1.before(date2)) {
    System.out.println("date1 is before date2.");
} else if (date1.after(date2)) {
    System.out.println("date1 is after date2.");
}


格式化日期

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = formatter.format(date);
System.out.println("Formatted Date: " + formattedDate);



2. LocalDate


LocalDate 是 Java 8 引入的日期类,属于 java.time 包下的一部分。它用于表示不带时间的日期,并提供了丰富的方法来进行日期的计算、格式化和操作。

以下是 LocalDate 类的一些常用方法以及应用示例:

LocalDate.now(): 获取当前日期

LocalDate currentDate = LocalDate.now();


LocalDate.of(int year, int month, int dayOfMonth):根据指定的年、月、日构造一个 LocalDate 对象。

LocalDate date = LocalDate.of(2023, 6, 21);


getYear()、getMonthValue()、getDayOfMonth(): 获取年、月、日的值。

int year = date.getYear();
int month = date.getMonthValue();
int dayOfMonth = date.getDayOfMonth();


plusXxx(long amountToAdd)、minusXxx(long amountToSubtract): 对日期进行加减操作,例如增加/减少天数、月数等

LocalDate newDate = date.plusDays(7); // 增加7天
LocalDate previousDate = date.minusMonths(1); // 减少1个月


isBefore(LocalDate other)、isAfter(LocalDate other): 判断日期的先后顺序。

LocalDate date1 = LocalDate.of(2023, 6, 21);
LocalDate date2 = LocalDate.of(2023, 6, 20);
if (date1.isBefore(date2)) {
    System.out.println("date1 is before date2.");
} else if (date1.isAfter(date2)) {
    System.out.println("date1 is after date2.");
}


isEqual(LocalDate other): 判断两个日期是否相等。

LocalDate date1 = LocalDate.of(2023, 6, 21);
LocalDate date2 = LocalDate.of(2023, 6, 21);
if (date1.isEqual(date2)) {
    System.out.println("Dates are equal.");
}


toString(): 将 LocalDate 对象转换为字符串,格式为 yyyy-MM-dd

LocalDate date = LocalDate.now();
String dateString = date.toString();


获取当前日期:

LocalDate currentDate = LocalDate.now();
System.out.println("Current Date: " + currentDate);


计算日期差:

LocalDate date1 = LocalDate.of(2023, 6, 21);
LocalDate date2 = LocalDate.of(2023, 6,


二、数字转换为日期


1. Instant


Instant 类提供了处理精确时间点的功能,可以获得当前时间点、创建指定时间点的对象,并对时间点进行比较、计算和格式化等操作

以下是 Instant 类的一些常用方法以及应用示例:


now():

Instant now = Instant.now();


ofEpochSecond(long epochSecond): 根据指定的秒数创建一个 Instant 对象。

Instant instant = Instant.ofEpochSecond(1624264800L);


ofEpochMilli(long epochMilli): 根据指定的毫秒数创建一个 Instant 对象。

Instant instant = Instant.ofEpochMilli(1624264800000L);


getEpochSecond(): 获取从纪元开始的秒数。

long epochSecond = instant.getEpochSecond();


toEpochMilli(): 获取从纪元开始的毫秒数。

long epochMilli = instant.toEpochMilli();


isBefore(Instant other): 判断当前时间点是否在另一个时间点之前。

Instant instant1 = Instant.now();
Instant instant2 = Instant.parse("2023-06-21T12:00:00Z");
if (instant1.isBefore(instant2)) {
    System.out.println("instant1 is before instant2.");
}


计算时间差:

Instant start = Instant.now();
// 执行一些耗时的操作
Instant end = Instant.now();
Duration duration = Duration.between(start, end);
System.out.println("Time taken: " + duration.getSeconds() + " seconds");


格式化时间:

Instant instant = Instant.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = formatter.format(instant.atZone(ZoneId.systemDefault()));
System.out.println("Formatted DateTime: " + formattedDateTime);


三、格式化数字或日期


1.DecimalFormat类


DecimalFormat(String pattern): 根据指定的模式创建一个 DecimalFormat 对象。

DecimalFormat df1 = new DecimalFormat("0.0");   
DecimalFormat df2 = new DecimalFormat("#.#");   
DecimalFormat df3 = new DecimalFormat("000.000");   
DecimalFormat df4 = new DecimalFormat("###.###");   
System.out.println(df1.format(12.34));   
System.out.println(df2.format(12.34));   
System.out.println(df3.format(12.34));   
System.out.println(df4.format(12.34));   
结果:
12.3 
12.3 
012.340 
12.34  


parse(String text) 将给定的字符串解析为数值。

import java.text.DecimalFormat;
import java.text.ParseException;
public class DecimalFormatExample {
    public static void main(String[] args) {
        String formattedNumber = "12,345.67";
        // 创建 DecimalFormat 对象,指定模式 "#,###.##"
        DecimalFormat decimalFormat = new DecimalFormat("#,###.##");
        try {
            // 使用 .parse() 方法将格式化的字符串解析为数字
            double number = decimalFormat.parse(formattedNumber).doubleValue();
            System.out.println("Parsed Number: " + number);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}


格式化货币金额:

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class DecimalFormatExample {
    public static void main(String[] args) {
        double amount = 12345.67;
        // 创建 NumberFormat 对象,并指定为货币格式
        NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.getDefault());
        // 将 NumberFormat 转换为 DecimalFormat,以便进一步自定义格式
        DecimalFormat decimalFormat = (DecimalFormat) currencyFormat;
        // 设置货币格式模式
        decimalFormat.applyPattern("\u00A4#,##0.00");
        // 格式化货币金额
        String formattedAmount = decimalFormat.format(amount);
        System.out.println("Formatted Amount: " + formattedAmount);
    }
}
输出(以中国人民币为例):
Formatted Amount: ¥12,345.67


百分比格式化:

import java.text.DecimalFormat;
public class DecimalFormatExample {
    public static void main(String[] args) {
        double percentage = 0.75;
        // 创建 DecimalFormat 对象,并指定百分比格式模式
        DecimalFormat decimalFormat = new DecimalFormat("0.00%");
        // 将小数转换为百分比字符串
        String formattedPercentage = decimalFormat.format(percentage);
        System.out.println("Formatted Percentage: " + formattedPercentage);
    }
}
输出:
Formatted Percentage: 75.00%


2. DateTimeFormatter类


DateTimeFormatter 类是 Java 8 引入的日期时间格式化和解析类,它提供了丰富的方法和模式来进行日期时间的格式化和解析。下面是 DateTimeFormatter 类的一些常用方法和应用示例:

格式化日期时间:

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
    public static void main(String[] args) {
        LocalDateTime dateTime = LocalDateTime.now();
        // 创建 DateTimeFormatter 对象
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 格式化日期时间
        String formattedDateTime = dateTime.format(formatter);
        System.out.println("Formatted DateTime: " + formattedDateTime);
    }
}
输出:
Formatted DateTime: 2023-06-21 15:30:45


解析日期时间

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class DateTimeFormatterExample {
    public static void main(String[] args) {
        String dateTimeString = "2023-06-21 15:30:45";
        // 创建 DateTimeFormatter 对象
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 解析日期时间字符串
        LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);
        System.out.println("Parsed DateTime: " + dateTime);
    }
}
输出:
Parsed DateTime: 2023-06-21T15:30:45


预定义的格式器:

DateTimeFormatter 类还提供了一些预定义的格式器,可以简化日期时间的格式化和解析。

例如,使用 ISO_LOCAL_DATE 格式器来格式化日期:

DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
String formattedDate = LocalDate.now().format(formatter);
System.out.println("Formatted Date: " + formattedDate);
输出:
Formatted Date: 2023-06-21


本地化设置:

DateTimeFormatter 类支持指定不同的本地化设置,以根据特定的语言环境显示日期时间。

例如,使用中文本地化设置来格式化日期:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日", Locale.CHINA);
String formattedDate = LocalDate.now().format(formatter);
System.out.println("Formatted Date: " + formattedDate);
输出:
Formatted Date: 2023年06月21日


四、数字与日期的计算


1.Calendar类


我们现在已经能够格式化并创建一个日期对象了,但是我们如何才能设置和获取日期数据的特定部分呢,比如说小时,日,或者分钟? 我们又如何在日期的这些部分加上或者减去值呢?

答案是使用Calendar 类。

Calendar类的功能要比Date类强大很多,而且在实现方式上也比Date类要复杂一些。

Calendar类是一个抽象类,在实际使用时实现特定的子类的对象,创建对象的过程对程序员来说是透明的,只需要使用getInstance方法创建即可。


获取当前日期时间:

import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        // 获取当前日期时间
        Calendar calendar = Calendar.getInstance();
        System.out.println("Current date and time: " + calendar.getTime());
    }
}
输出:
Current date and time: Thu Jun 21 15:30:45 CST 2023


其中该对象字段类型

import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        // 获取年份
        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        System.out.println("Year: " + year);
        // 获取月份(注意月份从 0 开始,所以需要加 1)
        int month = calendar.get(Calendar.MONTH) + 1;
        System.out.println("Month: " + month);
        // 获取日期
        int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
        System.out.println("Day of the month: " + dayOfMonth);
        // 获取小时
        int hour = calendar.get(Calendar.HOUR_OF_DAY);
        System.out.println("Hour: " + hour);
        // 获取分钟
        int minute = calendar.get(Calendar.MINUTE);
        System.out.println("Minute: " + minute);
        // 获取秒钟
        int second = calendar.get(Calendar.SECOND);
        System.out.println("Second: " + second);
    }
}
输出:
Year: 2023
Month: 6
Day of the month: 21
Hour: 15
Minute: 30
Second: 45

设置特定字段的值:

import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 设置年份为 2022
        calendar.set(Calendar.YEAR, 2022);
        // 设置月份为 10(注意月份从 0 开始,所以设置为 9)
        calendar.set(Calendar.MONTH, 9);
        // 设置日期为 15
        calendar.set(Calendar.DAY_OF_MONTH, 15);
        System.out.println("Updated date and time: " + calendar.getTime());
    }
}
输出:
Updated date and time: Fri Oct 15 15:30:45 CST 2022


日期计算和操作:

import java.util.Calendar;
public class CalendarExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        // 增加一个月
        calendar.add(Calendar.MONTH, 1);
        // 减少一周
        calendar.add(Calendar.WEEK_OF_YEAR, -1);
        // 比较两个日期
        Calendar anotherCalendar = Calendar.getInstance();
        anotherCalendar.set(Calendar.YEAR, 2023);
        boolean isAfter = calendar.after(anotherCalendar);
        boolean isBefore = calendar.before(anotherCalendar);
        System.out.println("Updated date and time: " + calendar.getTime());
        System.out.println("Is after: " + isAfter);
        System.out.println("Is before: " + isBefore);
    }
}
输出:
Updated date and time: Sat Jul 15 15:30:45 CST 2023
Is after: true
Is before: false


然而,Calendar 类在 Java 8 中已被废弃,推荐使用新的日期和时间 API(例如 LocalDate、LocalTime 和 LocalDateTime)来替代。

目录
相关文章
|
1月前
|
人工智能 算法 Java
Java与AI驱动区块链:构建智能合约与去中心化AI应用
区块链技术和人工智能的融合正在开创去中心化智能应用的新纪元。本文深入探讨如何使用Java构建AI驱动的区块链应用,涵盖智能合约开发、去中心化AI模型训练与推理、数据隐私保护以及通证经济激励等核心主题。我们将完整展示从区块链基础集成、智能合约编写、AI模型上链到去中心化应用(DApp)开发的全流程,为构建下一代可信、透明的智能去中心化系统提供完整技术方案。
223 3
|
3月前
|
存储 数据采集 搜索推荐
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
本篇文章探讨了 Java 大数据在智慧文旅景区中的创新应用,重点分析了如何通过数据采集、情感分析与可视化等技术,挖掘游客情感需求,进而优化景区服务。文章结合实际案例,展示了 Java 在数据处理与智能推荐等方面的强大能力,为文旅行业的智慧化升级提供了可行路径。
Java 大视界 -- Java 大数据在智慧文旅旅游景区游客情感分析与服务改进中的应用实践(226)
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
本文探讨Java大数据可视化在城市空气质量监测与污染溯源中的创新应用,结合多源数据采集、实时分析与GIS技术,助力环保决策,提升城市空气质量管理水平。
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用(216)
|
3月前
|
存储 监控 数据可视化
Java 大视界 -- 基于 Java 的大数据可视化在企业生产运营监控与决策支持中的应用(228)
本文探讨了基于 Java 的大数据可视化技术在企业生产运营监控与决策支持中的关键应用。面对数据爆炸、信息孤岛和实时性不足等挑战,Java 通过高效数据采集、清洗与可视化引擎,助力企业构建实时监控与智能决策系统,显著提升运营效率与竞争力。
|
3月前
|
Java 大数据 数据处理
Java 大视界 -- 基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战(222)
本文探讨了基于 Java 的大数据实时数据处理在工业互联网设备协同制造中的应用与挑战。文章分析了传统制造模式的局限性,介绍了工业互联网带来的机遇,并结合实际案例展示了 Java 在多源数据采集、实时处理及设备协同优化中的关键技术应用。同时,也深入讨论了数据安全、技术架构等挑战及应对策略。
|
3月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
118 8
|
1月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
140 1
|
2月前
|
人工智能 Java API
Java与大模型集成实战:构建智能Java应用的新范式
随着大型语言模型(LLM)的API化,将其强大的自然语言处理能力集成到现有Java应用中已成为提升应用智能水平的关键路径。本文旨在为Java开发者提供一份实用的集成指南。我们将深入探讨如何使用Spring Boot 3框架,通过HTTP客户端与OpenAI GPT(或兼容API)进行高效、安全的交互。内容涵盖项目依赖配置、异步非阻塞的API调用、请求与响应的结构化处理、异常管理以及一些面向生产环境的最佳实践,并附带完整的代码示例,助您快速将AI能力融入Java生态。
442 12
|
2月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
377 1