| 知乎专栏 |
java.util.Date, java.sql.Date, java.sql.Time, java.sql.Timestamp 区别
package cn.netkiller.java.date;
/**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
System.out.println("Hello World!");
// Get standard date and time
java.util.Date utilDate = new java.util.Date();
long javaTime = utilDate.getTime();
System.out.println("The Java Date is:" + utilDate.toString());
// Get and display SQL DATE
java.sql.Date sqlDate = new java.sql.Date(javaTime);
System.out.println("The SQL DATE is: " + sqlDate.toString());
// Get and display SQL TIME
java.sql.Time sqlTime = new java.sql.Time(javaTime);
System.out.println("The SQL TIME is: " + sqlTime.toString());
// Get and display SQL TIMESTAMP
java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(javaTime);
System.out.println("The SQL TIMESTAMP is: " + sqlTimestamp.toString());
}
}
The Java Date is:Thu Aug 24 16:51:57 CST 2017 The SQL DATE is: 2017-08-24 The SQL TIME is: 16:51:57 The SQL TIMESTAMP is: 2017-08-24 16:51:57.234
Date currentDate = new Date();
int month = currentDate.getMonth() + 1;
System.out.println("当前月份为:" + month);
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Main {
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.now();
String formattedDateTime = dateTime.format(formatter);
System.out.println(formattedDateTime);
}
}
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("B");
System.out.println(dtf.format(LocalTime.of(8, 0)));
System.out.println(dtf.format(LocalTime.of(13, 0)));
System.out.println(dtf.format(LocalTime.of(20, 0)));
System.out.println(dtf.format(LocalTime.of(23, 0)));
System.out.println(dtf.format(LocalTime.of(0, 0)));
上午 下午 晚上 晚上 午夜
Data 转 LocalDate
Date date = new Date();
// 1. 将Date转换为LocalDate(需指定时区,避免默认时区差异)
LocalDate localDate = date.toInstant()
.atZone(ZoneId.systemDefault()) // 系统默认时区(如Asia/Shanghai)
.toLocalDate();
// 2. 定义格式化器:YYYY-MM-DD
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
// 3. 转换为字符串
String dateStr = localDate.format(formatter);
字符串转日期
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String str = "2018-12-11";
Date date = df.parse(str);
System.out.println(date);
} catch (Exception e) {
e.printStackTrace();
}
package cn.netkiller.example;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public StringToDate() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = "2008-8-8 8:8:8";
try {
Date date = formatter.parse(dateString);
System.out.println(date);
System.out.println(formatter.format(date));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//get current date time with Date()
Date date = new Date();
System.out.println(dateFormat.format(date));
//get current date time with Calendar()
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));
}
不规范的 RFC3339 日期
String dt = "2021-08-26T09:17:23.859291804+08:00";
String rfc3339 = dt.replaceAll("\\.([0-9]+)", "");
System.out.println(dt);
System.out.println(rfc3339);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
System.out.println(simpleDateFormat.parse(rfc3339).toLocaleString());
String beginTime = "2015-05-20 13:12:30";
String endTime = "2015-07-15 10:20:12";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = format.parse(beginTime);
Date date2 = format.parse(endTime);
int compareTo = date1.compareTo(date2);
System.out.println(compareTo);
} catch (ParseException e) {
e.printStackTrace();
}
String beginTime = "2015-05-20 13:12:30";
String endTime = "2015-07-15 10:20:12";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = format.parse(beginTime);
Date date2 = format.parse(endTime);
boolean before = date1.before(date2);
System.out.println(before);
} catch (ParseException e) {
e.printStackTrace();
}
String beginTime = "2015-05-20 13:12:30";
String endTime = "2015-07-15 10:20:12";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date date1 = format.parse(beginTime);
Date date2 = format.parse(endTime);
long beginMillisecond = date1.getTime();
long endMillisecond = date2.getTime();
System.out.println(beginMillisecond > endMillisecond);
} catch (ParseException e) {
e.printStackTrace();
}
Timestamp timestamp = new Timestamp(System.currentTimeMillis()); Date date = new Date(); Timestamp timestamp = new Timestamp(date.getTime());
package cn.netkiller.example;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
public class TimeZoneTest {
public TimeZoneTest() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone timeZone = TimeZone.getTimeZone("Asia/Harbin");
Date date = new Date();
Timestamp timestamp = new Timestamp(date.getTime());
System.out.println(timestamp);
timestamp.setHours(timestamp.getHours()+8);
System.out.println(timestamp);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println(simpleDateFormat.format(date));
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Harbin"));
System.out.println(simpleDateFormat.format(date));
Calendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.setTimeZone(timeZone);
System.out.println(simpleDateFormat.format(calendar.getTime()));
}
}
package cn.netkiller.example;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateCompare {
public DateCompare() {
// TODO Auto-generated constructor stub
}
public void fun1() throws InterruptedException {
Date d1 = new Date();
Thread.sleep(5000);
Date d2 = new Date();
if (d1.before(d2)) {
System.out.println(String.format("%s < %s", d1.toString(), d2.toString()));
} else {
System.out.println(String.format("%s > %s", d1.toString(), d2.toString()));
}
if (d2.after(d1)) {
System.out.println(String.format("%s > %s", d2.toString(), d1.toString()));
}
System.out.println(String.format("%s : %s => %d", d2.toString(), d1.toString(), d1.compareTo(d2)));
System.out.println(String.format("%s : %s => %d", d1.toString(), d2.toString(), d2.compareTo(d1)));
}
public void fun2() throws InterruptedException {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = new Date();
Date date2 = new Date();
String s1 = dateFormat.format(date1);
String s2 = dateFormat.format(date2);
System.out.println(String.format("%s : %s => %d", s1, s2, s1.compareTo(s2)));
date1 = new Date();
Thread.sleep(5000);
date2 = new Date();
s1 = dateFormat.format(date1);
s2 = dateFormat.format(date2);
System.out.println(String.format("%s : %s => %d", s1, s2, s1.compareTo(s2)));
System.out.println(String.format("%s : %s => %d", s2, s1, s2.compareTo(s1)));
System.out.println();
}
public void fun3() throws InterruptedException, ParseException {
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//Date time = formatter.parse("2016-09-27 16:29");
Date time = formatter.parse("2016-08-09 09:15");
Date startDate = formatter.parse("2016-08-09 09:15");
Date endDate = formatter.parse("2016-09-27 16:30");
if (time.before(startDate) || time.after(endDate)) {
System.out.println("Skip");
}
}
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
DateCompare dateCompare = new DateCompare();
dateCompare.fun1();
System.out.println();
dateCompare.fun2();
System.out.println();
dateCompare.fun3();
}
}
Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH )+1; System.out.println(year + "年 " + month + "月");
//获取当前日期
Date date = new Date();
//创建Calendar实例
Calendar cal = Calendar.getInstance();
cal.setTime(date); //设置当前时间
cal.add(Calendar.YEAR, 1); //在当前时间基础上加一年
//将时间格式化成yyyy-MM-dd HH:mm:ss的格式
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(format.format(cal.getTime()));
//同理增加一个月和一天的方法:
cal.add(Calendar.MONTH, 1);
cal.add(Calendar.DAY, 1);
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
Date d1 = new SimpleDateFormat("yyyy-MM").parse("2020-02-01");//定义起始日期
Date d2 = new SimpleDateFormat("yyyy-MM").parse("2024-03-02");//定义结束日期
calendar.setTime(d2);
calendar.add(Calendar.MONTH, 1);
d2 = calendar.getTime();
calendar.setTime(d1);//设置日期起始时间
while (calendar.getTime().before(d2)) {//判断是否到结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
String str = sdf.format(calendar.getTime());
System.out.println(str);//输出日期结果
calendar.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
private List<Date> getMonthRange(String startDate, String endDate) {
List<Date> monthList = new ArrayList<>();
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
try {
Date d1 = new SimpleDateFormat("yyyy-MM").parse(startDate);//定义起始日期
Date d2 = new SimpleDateFormat("yyyy-MM").parse(endDate);//定义结束日期
calendar.setTime(d2);
calendar.add(Calendar.MONTH, 1);
d2 = calendar.getTime();
calendar.setTime(d1);//设置日期起始时间
while (calendar.getTime().before(d2)) {//判断是否到结束日期
monthList.add(calendar.getTime());
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
// String str = sdf.format(calendar.getTime());
// System.out.println(str);//输出日期结果
calendar.add(Calendar.MONTH, 1);//进行当前日期月份加1
}
} catch (ParseException e) {
}
return monthList;
}
Calendar calendar = Calendar.getInstance();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM");
Date d1 = new SimpleDateFormat("yyyy-MM-dd").parse("2024-03-10");//定义起始日期
Date d2 = new SimpleDateFormat("yyyy-MM-dd").parse("2024-03-20");//定义结束日期
calendar.setTime(d2);
calendar.add(Calendar.DATE, 1);
d2 = calendar.getTime();
calendar.setTime(d1);//设置日期起始时间
while (calendar.getTime().before(d2)) {//判断是否到结束日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String str = sdf.format(calendar.getTime());
System.out.println(str);//输出日期结果
calendar.add(Calendar.DATE, 1);//进行当前日期月份加1
}
public Date getToday(String time) {
final Calendar cal = Calendar.getInstance();
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd " + time);
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = fmt.parse(dateFormat.format(cal.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
private Date addOneDay(Date date, int day) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.DATE, day);
return cal.getTime();
}
package cn.netkiller.date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Yesterday {
public Yesterday() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Yesterday yesterday = new Yesterday();
System.out.println(yesterday.yesterday());
System.out.println(yesterday.getYesterday("00:00:00"));
System.out.println(yesterday.getYesterday("23:59:59"));
}
private Date yesterday() {
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
return cal.getTime();
}
private Date getYesterday(String time) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd "+time);
DateFormat fmt =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = null;
try {
date = fmt.parse(dateFormat.format(yesterday()));
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 13, 55);
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("Asia/Shanghai"));
Date date = Date.from(zonedDateTime.toInstant());
Instant instant = Instant.ofEpochMilli(date.getTime());
LocalDateTime ldt = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
Instant instant = ldt.toInstant(ZoneOffset.UTC);
Date date = Date.from(instant);
时间比较
import java.time.LocalDateTime;
public class LocalDateTimeCompareDemo {
public static void main(String[] args) {
// 构建两个 LocalDateTime 实例(方式:of() 或 parse())
LocalDateTime time1 = LocalDateTime.of(2025, 11, 4, 10, 30, 0); // 2025-11-04 10:30:00
LocalDateTime time2 = LocalDateTime.parse("2025-11-04T14:20:00"); // 2025-11-04 14:20:00
LocalDateTime time3 = LocalDateTime.of(2025, 11, 4, 10, 30, 0); // 与 time1 相等
// 1. isBefore():是否在之前
boolean before = time1.isBefore(time2);
System.out.println("time1 在 time2 之前?" + before); // true
// 2. isAfter():是否在之后
boolean after = time2.isAfter(time1);
System.out.println("time2 在 time1 之后?" + after); // true
// 3. isEqual():是否相等(精确到纳秒,年月日时分秒纳秒完全一致)
boolean equal = time1.isEqual(time3);
System.out.println("time1 与 time3 相等?" + equal); // true
// 4. compareTo():比较(返回 int,支持排序)
int compare1 = time1.compareTo(time2); // time1 < time2 → 返回负数(-1)
int compare2 = time2.compareTo(time1); // time2 > time1 → 返回正数(1)
int compare3 = time1.compareTo(time3); // 相等 → 返回 0
System.out.println("time1.compareTo(time2):" + compare1); // -1
System.out.println("time2.compareTo(time1):" + compare2); // 1
System.out.println("time1.compareTo(time3):" + compare3); // 0
}
}
去一个日期范围
package cn.netkiller.test;
import java.time.LocalDateTime;
public class Test {
public static void main(String[] args) {
LocalDateTime afterTime = LocalDateTime.now().minusHours(1);
LocalDateTime beforeTime = LocalDateTime.now().minusMinutes(10);
System.out.printf("%s ~ %s", afterTime, beforeTime);
}
}
import java.time.Duration;
public class SecondsToMillisecondsWithDuration {
public static void main(String[] args) {
// 1. 整数秒转换
int seconds1 = 10;
// 通过 Duration.ofSeconds() 创建对应秒数的 Duration 对象
Duration duration1 = Duration.ofSeconds(seconds1);
// 调用 toMillis() 方法获取毫秒数
long millis1 = duration1.toMillis();
System.out.println(seconds1 + " 秒 = " + millis1 + " 毫秒"); // 输出:10 秒 = 10000 毫秒
// 2. 带纳秒的秒数转换(支持更精确的小数秒)
long seconds2 = 3; // 秒数整数部分
int nanos = 500_000_000; // 纳秒部分(500毫秒 = 500,000,000纳秒)
Duration duration2 = Duration.ofSeconds(seconds2, nanos);
long millis2 = duration2.toMillis();
System.out.println(seconds2 + "秒 + " + nanos + "纳秒 = " + millis2 + " 毫秒"); // 输出:3秒 + 500000000纳秒 = 3500 毫秒
// 3. 处理大数值秒数
long seconds3 = 3_600_000; // 1000小时对应的秒数
Duration duration3 = Duration.ofSeconds(seconds3);
long millis3 = duration3.toMillis();
System.out.println(seconds3 + " 秒 = " + millis3 + " 毫秒"); // 输出:3600000 秒 = 3600000000 毫秒
}
}
100000 毫秒 → 格式化为 00:10(分:秒)
import java.time.Duration;
public static String formatMsToMinSec(long milliseconds) {
Duration duration = Duration.ofMillis(milliseconds);
long minutes = duration.toMinutes();
long seconds = duration.minusMinutes(minutes).getSeconds();
// 格式化成 00:00
return String.format("%02d:%02d", minutes, seconds);
}
String time = String.format("请求频率太频繁,请 %02d:%02d 后重试",
Duration.ofMillis(expire).toMinutes(),
Duration.ofMillis(expire).toSecondsPart()
);
Duration d = Duration.ofSeconds(100);
String time = String.format("%02d:%02d", d.toMinutesPart(), d.toSecondsPart());
package com.netkiller.conference.ai.utils;
import android.os.Build;
import androidx.annotation.RequiresApi;
import java.time.Duration;
import java.time.LocalDateTime;
public class Datatime {
public static String elapsed(LocalDateTime startTime, LocalDateTime endTime) {
Duration duration = Duration.between(startTime, endTime);
long hours = duration.toHours();
long minutes = duration.toMinutesPart();
long seconds = duration.toSecondsPart();
long millis = duration.toMillisPart();
if (hours > 0) {
// return String.format("%d 时 %d 分 %d 秒 %d 毫秒", hours, minutes, seconds, millis);
return String.format("%02d:%02d:%02d", hours, minutes, seconds);
} else if (minutes > 0) {
// return String.format("%d 分 %d 秒 %d 毫秒", minutes, seconds, millis);
return String.format("%02d:%02d", minutes, seconds);
} else if (seconds > 0) {
// return String.format("%d 秒 %d 毫秒", seconds, millis);
return String.format("00:%02d", seconds);
} else {
// return String.format("%d 毫秒", millis);
return "00:00";
}
}
}