java 日期和时间字符串格式化

合集下载

Java时间日期处理技巧:日期格式化和时区设置

Java时间日期处理技巧:日期格式化和时区设置

Java时间日期处理技巧:日期格式化和时区设置在Java编程中,日期和时间处理是非常常见的任务。

无论是在开发Web应用程序、处理数据还是进行系统日志记录,都需要对日期和时间进行操作。

本文将介绍一些Java中常用的日期格式化和时区设置的技巧,帮助开发者更好地处理日期和时间。

1. 日期格式化日期格式化是将日期对象转换为特定格式的字符串表示。

Java提供了SimpleDateFormat类来实现日期格式化。

以下是一个简单的例子:```javaimport java.text.SimpleDateFormat;import java.util.Date;public class DateFormatExample {public static void main(String[] args) {Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String formattedDate = sdf.format(date);System.out.println("Formatted Date: " + formattedDate);}}```在上面的例子中,我们使用了"yyyy-MM-dd HH:mm:ss"作为日期格式化的模式,它将日期格式化为"年-月-日时:分:秒"的形式。

Java的日期格式化模式有很多选项,可以根据需求进行调整。

例如,"yyyy-MM-dd"表示"年-月-日","HH:mm:ss"表示"时:分:秒","EEE"表示星期几等等。

更多的格式化选项可以参考Java官方文档。

2. 时区设置时区是指地球上划分的不同区域,每个时区都有自己的标准时间。

java之Date(日期)、Date格式化、Calendar(日历)

java之Date(日期)、Date格式化、Calendar(日历)

java之Date(⽇期)、Date格式化、Calendar(⽇历)参考Date(⽇期)Date类注意:是java.util.Date;⽽⾮ java.sql.Date,此类是给数据库访问的时候使⽤的时间原点概念所有的数据类型,⽆论是整数,布尔,浮点数还是字符串,最后都需要以数字的形式表现出来。

⽇期类型也不例外,换句话说,⼀个⽇期,⽐如2020年10⽉1⽇,在计算机⾥,会⽤⼀个数字来代替。

那么最特殊的⼀个数字,就是零. 零这个数字,就代表Java中的时间原点,其对应的⽇期是1970年1⽉1⽇ 8点0分0秒。

(为什么是8点,因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个⼩时)为什么对应1970年呢?因为1969年发布了第⼀个 UNIX 版本:AT&T,综合考虑,当时就把1970年当做了时间原点。

所有的⽇期,都是以为这个0点为基准,每过⼀毫秒,就+1。

创建⽇期对象package date;//import java.util.Date;public class TestDate {public static void main(String[] args) {// 当前时间Date d1 = new Date();System.out.println("当前时间:");System.out.println(d1);System.out.println();// 从1970年1⽉1⽇早上8点0分0秒开始经历的毫秒数Date d2 = new Date(5000);System.out.println("从1970年1⽉1⽇早上8点0分0秒开始经历了5秒的时间");System.out.println(d2);}}getTimegetTime() 得到⼀个long型的整数这个整数代表从1970.1.1 08:00:00:000 开始每经历⼀毫秒,增加1package date;//import java.util.Date;//注意:是java.util.Date;//⽽⾮ java.sql.Date,此类是给数据库访问的时候使⽤的Date now= new Date();//打印当前时间System.out.println("当前时间:"+now.toString());//getTime() 得到⼀个long型的整数//这个整数代表 1970.1.1 08:00:00:000,每经历⼀毫秒,增加1System.out.println("当前时间getTime()返回的值是:"+now.getTime());Date zero = new Date(0);System.out.println("⽤0作为构造⽅法,得到的⽇期是:"+zero);}}System.currentTimeMillis()当前⽇期的毫秒数new Date().getTime() 和 System.currentTimeMillis() 是⼀样的不过由于机器性能的原因,可能会相差⼏⼗毫秒,毕竟每执⾏⼀⾏代码,都是需要时间的package date;//import java.util.Date;public class TestDate {public static void main(String[] args) {Date now= new Date();//当前⽇期的毫秒数System.out.println("Date.getTime() \t\t\t返回值: "+now.getTime());//通过System.currentTimeMillis()获取当前⽇期的毫秒数System.out.println("System.currentTimeMillis() \t返回值: "+System.currentTimeMillis());}}练习-⽇期借助,创建⼀个从1995.1.1 00:00:00 到 1995.12.31 23:59:59 之间的随机⽇期package date;import java.util.Date;import java.text.ParseException;import java.text.SimpleDateFormat;public class Test2 {public static void main(String[] args) throws ParseException {String startStr = "1995.1.1 00:00:00";String endStr = "1995.12.31 23:59:59";SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");Date start = sdf.parse(startStr);Date end = sdf.parse(endStr);long random = (long)(Math.random() * (end.getTime() - start.getTime()) + start.getTime());System.out.println(new Date(random));}}Date格式化⽇期转字符串SimpleDateFormat ⽇期格式化类package date;//import java.text.SimpleDateFormat;import java.util.Date;//y 代表年//M 代表⽉//d 代表⽇//H 代表24进制的⼩时//h 代表12进制的⼩时//m 代表分钟//s 代表秒//S 代表毫秒SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS" );Date d= new Date();String str = sdf.format(d);System.out.println("当前时间通过 yyyy-MM-dd HH:mm:ss SSS 格式化后的输出: "+str);SimpleDateFormat sdf1 =new SimpleDateFormat("yyyy-MM-dd" );Date d1= new Date();String str1 = sdf1.format(d1);System.out.println("当前时间通过 yyyy-MM-dd 格式化后的输出: "+str1);}}字符串转⽇期模式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持⼀致,如果不⼀样就会抛出解析异常ParseException package date;//import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class TestDate {public static void main(String[] args) {SimpleDateFormat sdf =new SimpleDateFormat("yyyy/MM/dd HH:mm:ss" );String str = "2016/1/5 12:12:12";try {Date d = sdf.parse(str);System.out.printf("字符串 %s 通过格式 yyyy/MM/dd HH:mm:ss %n转换为⽇期对象: %s",str,d.toString());} catch (ParseException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}练习-⽇期格式化准备⼀个长度是9的⽇期数组使⽤1970年-2000年之间的随机⽇期初始化该数组按照这些⽇期的时间进⾏升序排序⽐如 1988-1-21 12:33:22 就会排在 1978-4-21 19:07:23 前⾯,因为它的时间更⼩,虽然⽇期更⼤public static void test2() throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy");Date startDate = sdf.parse("1970");Date endDate = sdf.parse("2000");long difference = endDate.getTime() - startDate.getTime();Date[] dateArr = new Date[9];System.out.println("排序前随机时间数组为:");//3⾏3列打印该随机时间数组for (int i = 0; i < dateArr.length; i++) {Date date = new Date((long) (Math.random() * difference + startDate.getTime()));dateArr[i] = date;//System.out.print(sdf.format(date)+" ");System.out.printf(date + "");if ((i + 1) % 3 == 0) {System.out.println();}}SimpleDateFormat sdf2 = new SimpleDateFormat("HHmmss");for (int i = 0; i < dateArr.length - 1; i++) {for (int j = i + 1; j < dateArr.length; j++) {String str1 = sdf2.format(dateArr[i]);int num1 = Integer.parseInt(str1);String str2 = sdf2.format(dateArr[j]);int num2 = Integer.parseInt(str2);if (num1 > num2) {Date temp = dateArr[i];dateArr[i] = dateArr[j];dateArr[j] = temp;}}}System.out.println("排序后随机时间数组为:");//3⾏3列打印该随机时间数组for (int i = 0; i < dateArr.length; i++) {//System.out.print(sdf.format(dateArr[i]));System.out.printf(dateArr[i] + "");if ((i + 1) % 3 == 0) {System.out.println();}}}Calendar(⽇历)Calendar类即⽇历类,常⽤于进⾏“翻⽇历”,⽐如下个⽉的今天是多久Calendar与Date进⾏转换package date;//import java.util.Calendar;import java.util.Date;public class TestDate {public static void main(String[] args) {//采⽤单例模式获取⽇历对象Calendar.getInstance();Calendar c = Calendar.getInstance();//通过⽇历对象得到⽇期对象Date d = c.getTime();Date d2 = new Date(0);c.setTime(d2); //把这个⽇历,调成⽇期 : 1970.1.1 08:00:00}}翻⽇历add⽅法,在原⽇期上增加年/⽉/⽇set⽅法,直接设置年/⽉/⽇package date;import java.text.SimpleDateFormat;//import java.util.Calendar;import java.util.Date;public class TestDate {private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static void main(String[] args) {Calendar c = Calendar.getInstance();Date now = c.getTime();// 当前⽇期System.out.println("当前⽇期:\t" + format(c.getTime()));// 下个⽉的今天c.setTime(now);c.add(Calendar.MONTH, 1);System.out.println("下个⽉的今天:\t" +format(c.getTime()));// 去年的今天c.setTime(now);c.add(Calendar.YEAR, -1);System.out.println("去年的今天:\t" +format(c.getTime()));// 上个⽉的第三天c.setTime(now);c.add(Calendar.MONTH, -1);c.set(Calendar.DATE, 3);System.out.println("上个⽉的第三天:\t" +format(c.getTime()));}private static String format(Date time) {return sdf.format(time);}}练习-Calendar找出下个⽉的倒数第3天是哪天//找出下个⽉的倒数第3天是哪天public static void test4() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar c = Calendar.getInstance();//⽇历类采⽤了单例模式c.add(Calendar.MONTH, 1);int month = c.get(Calendar.MONTH);while (c.get(Calendar.MONTH) == month) {c.add(Calendar.DATE, 1);System.out.println("c.add(DATE,1)结果:" + sdf.format(c.getTime()));}c.add(Calendar.DATE, -3);System.out.println("下个⽉的倒数第三天:" + sdf.format(c.getTime()));}。

Java字符串,日期的格式化

Java字符串,日期的格式化

Java字符串,⽇期的格式化JSP中常⽤的格式化包括:1. 字符串的格式化2. 字符串和HTML显⽰内容的格式化3. ⽇期的格式化⼀、字符串的格式化字符串处理是项⽬中使⽤最频繁的,Java中提供了⼆种格式化字符串的⽅法,JDBC还提供了⼀种问号参数类似于格式化SQL语句。

1. 使⽤String.format()⽅法格式化字符串语法格式为:public static String format(String format, Object... args)其中字符串中的占位符(与C语⾔相同)为:%d -- 整数 %f --⼩数 %s -- 字符串格式化时按占位符的顺序使⽤变量的值替换。

如有重复值,需要写两个%d,赋值两个例如:String str = "select top %d * from tb_user";str = String.format(str, 10);2. 使⽤MessageFormat格式化字符串。

类MessageFormat来⾃java.text包占位符:{0}、{1} 或者 {1[, 格式类型[,格式样式]]}格式类型有:number, date, time, choice格式样式详情请参见:JDK帮助。

例如:int planet = 7;String event = " disturbance ";String result = MessageFormat.format("At {1,time} on {1,date}, there was {2} on planet {0,number,integer}.",planet, new Date(), event);输出为:At 12:30 PM on Jul 3, 2053, there was disturbance on planet 7.3. SQL语句的问号参数使⽤?为占位符,顺序从1开始。

java中simpledate类的用法

java中simpledate类的用法

java中simpledate类的用法简单日期格式化(SimpleDateFormat)是Java编程语言中一个非常重要的类。

它可用于将日期和时间格式化为希望的格式,并将它们转换成字符串。

一、SimpleDateFormat类概述SimpleDateFormat类是java.text包中的一个类,它用于格式化日期和时间。

它继承自DateFormat类,因此可以使用DateFormat类中定义的方法,如format()和parse()方法。

二、SimpleDateFormat类的初始化初始化SimpleDateFormat对象有两种方法:1. 使用一个具体的模式字符串可以通过传递一个包含日期和时间格式的字符串来初始化SimpleDateFormat对象。

例如,以下代码将创建一个SimpleDateFormat对象,并使用"yyyyMMdd"模式字符串进行初始化:SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");2. 使用一个预定义的日期和时间样式SimpleDateFormat类提供了几个预定义的日期和时间样式,可以直接使用这些样式初始化SimpleDateFormat对象。

以下是几个常用的样式:SHORT:使用短日期格式,如"yy/MM/dd"或"yyyy/MM/dd"MEDIUM:使用中等日期格式,如"MMM d, yyyy"LONG:使用长日期格式,如"MMMM d, yyyy"FULL:使用完整日期格式,如"EEEE, MMMM d, yyyy"例如,以下代码将创建一个SimpleDateFormat对象,并使用SHORT样式进行初始化:SimpleDateFormat sdf = DateFormat.getDateInstance(DateFormat.SHORT);三、日期格式化SimpleDateFormat类的最重要的功能之一是将日期和时间格式化为字符串。

与众不同的Java日期格式化大全

与众不同的Java日期格式化大全

与众不同的Java⽇期格式化⼤全前⾔在 Java 中,经常要将时间字符串转换为⽇期,或者要将⽇期转换为时间字符串。

这种操作⼀般都是⽤java.text.SimpleDateFormat 类处理。

例如要将⽇期转换为时间字符串,那么就⽤下⾯的代码。

new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())得到的结果是2018-11-25 17:57:40其中 "yyyy-MM-dd HH:mm:ss" 这部分叫做时间模式,是由⼀些固定的字符组合来指定的。

java.text.SimpleDateFormat 可以根据这个模式调⽤ format ⽅法把时间对象格式化为符合模式的字符串,也可以根据这个模式调⽤ parse 来把⼀个符合模式的字符串解析为时间对象。

但是⼀直以来,这个⽤法都不太系统,所以对他的⽤法总结⼀下,希望对⼤家有帮助。

java.text.SimpleDateFormat 模式字符串下表是⽀持的时间模式的字符串字符含义G年代标志符y年M⽉d⽇h时在上午或下午(1~12)H时在⼀天中(0~23)m分s秒S毫秒E星期D⼀年中的第⼏天F⼀⽉中第⼏个星期⼏w⼀年中第⼏个星期W⼀⽉中第⼏个星期a上午/下午标记符k时在⼀天中(1~24)K时在上午或下午(0~11)z时区给出⼀个较完整的例⼦如下System.out.println(new SimpleDateFormat("G y-M-d Z E H:m:s:S a").format(new Date()));输出结果为公元 2018-11-26 +0800 星期⼀ 18:3:42:236 下午其中“公元”是年代,“ 2018-11-26”是格式化的年⽉⽇,“+0800” 是当前时区设置,“星期⼀”是星期,“17:32:11:099”是带毫秒的时间,“下午”是上下午标志。

JAVA WEb从入门到精通 第五章05 格式化字符串

JAVA WEb从入门到精通 第五章05 格式化字符串

常规类型格式化
在程序设计过程中,经常需要对常规类型的数据进行格式化,例如格式化为整数, 格式化为科学计数表示等,在Java中可以使用常规类型的格式化转换符来实现, 下表列出了常规类型的格式化字符串
本讲大纲: 1、日期和时间字符串格式化 2、常规类型格式化
日期和时间字符串格式化
在应用程序设计中,经常需要显示时间和日期。如果想输出满意的日期和时间格 式,一般需要编写大量的代码经过各种算法才能实现。format()方法通过给定的 特殊转换符作为参数来实现对日期和时间的格式化。
日期和时间字符串格式化
使用format()方法对日期进行格式化时,会用到日期格式化转换符,常用的日期 格式化转换符如下所示。
日期和时间字符串格式化
使用format()方法对时间进行格式化时,会用到时间格式化转换符,时间格式化 转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。 常用的时间格式化转换符如下表所示。

JAVA格式化日期、时间的方法

JAVA格式化日期、时间的方法

JAVA格式化⽇期、时间的⽅法使⽤ DateFormat 格式化⽇期、时间DateFormat 也是⼀个抽象类,它也提供了如下⼏个类⽅法⽤于获取 DateFormat 对象。

getDateInstance():返回⼀个⽇期格式器,它格式化后的字符串只有⽇期,没有时间。

该⽅法可以传⼊多个参数,⽤于指定⽇期样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

getTimeInstance():返回⼀个时间格式器,它格式化后的字符串只有时间,没有⽇期。

该⽅法可以传⼊多个参数,⽤于指定时间样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

getDateTimeInstance():返回⼀个⽇期、时间格式器,它格式化后的字符串既有⽇期,也有时间。

该⽅法可以传⼊多个参数,⽤于指定⽇期样式、时间样式和 Locale 等参数;如果不指定这些参数,则使⽤默认参数。

上⾯三个⽅法可以指定⽇期样式、时间样式参数,它们是的4个静态常量:FULL、LONG、MEDIUM 和 SHORT,通过这4个样式参数可以控制⽣成的格式化字符串。

看如下例⼦程序。

import java.util.*;import java.text.*;import static java.text.DateFormat.*;public class DateFormatTest {public static void main(String[] args) throws ParseException {// 需要被格式化的时间Date dt = new Date();// 创建两个Locale,分别代表中国、美国Locale[] locales = { Locale.CHINA, };DateFormat[] df = new DateFormat[16];// 为上⾯两个Locale创建16个DateFormat对象for (int i = 0; i < locales.length; i++) {df[i * 8] = DateFormat.getDateInstance(SHORT, locales[i]);df[i * 8 + 1] = DateFormat.getDateInstance(MEDIUM, locales[i]);df[i * 8 + 2] = DateFormat.getDateInstance(LONG, locales[i]);df[i * 8 + 3] = DateFormat.getDateInstance(FULL, locales[i]);df[i * 8 + 4] = DateFormat.getTimeInstance(SHORT, locales[i]);df[i * 8 + 5] = DateFormat.getTimeInstance(MEDIUM, locales[i]);df[i * 8 + 6] = DateFormat.getTimeInstance(LONG, locales[i]);df[i * 8 + 7] = DateFormat.getTimeInstance(FULL, locales[i]);}for (int i = 0; i < locales.length; i++) {String tip = i == 0 ? "----中国⽇期格式----" : "----美国⽇期格式----";System.out.println(tip);System.out.println("SHORT格式的⽇期格式:" + df[i * 8].format(dt));System.out.println("MEDIUM格式的⽇期格式:" + df[i * 8 + 1].format(dt));System.out.println("LONG格式的⽇期格式:" + df[i * 8 + 2].format(dt));System.out.println("FULL格式的⽇期格式:" + df[i * 8 + 3].format(dt));System.out.println("SHORT格式的时间格式:" + df[i * 8 + 4].format(dt));System.out.println("MEDIUM格式的时间格式:" + df[i * 8 + 5].format(dt));System.out.println("LONG格式的时间格式:" + df[i * 8 + 6].format(dt));System.out.println("FULL格式的时间格式:" + df[i * 8 + 7].format(dt));}}}上⾯程序共创建了16个 DateFormat 对象,分别为中国、美国两个 Locale 各创建8个 DateFormat 对象,分别是 SHORT、MEDIUM、LONG、FULL 四种样式的⽇期格式器、时间格式器。

详解Java中格式化日期的DateFormat与SimpleDateFormat类

详解Java中格式化日期的DateFormat与SimpleDateFormat类

详解Java中格式化⽇期的DateFormat与SimpleDateFormat类DateFormat其本⾝是⼀个抽象类,SimpleDateFormat 类是DateFormat类的⼦类,⼀般情况下来讲DateFormat类很少会直接使⽤,⽽都使⽤SimpleDateFormat类完成,下⾯我们具体来看⼀下两个类的⽤法:DateFormat1. DateFormat 介绍DateFormat 的作⽤是格式化并解析“⽇期/时间”。

实际上,它是Date的格式化⼯具,它能帮助我们格式化Date,进⽽将Date转换成我们想要的String字符串供我们使⽤不过DateFormat的格式化Date的功能有限,没有SimpleDateFormat强⼤;但DateFormat是SimpleDateFormat的⽗类。

所以,我们先对DateFormat有个整体了解,然后再学习SimpleDateFormat。

DateFormat 的作⽤是格式化Date。

它⽀持格式化风格包括 FULL、LONG、MEDIUM 和 SHORT 共4种:(01) DateFormat.SHORT完全为数字,如 12.13.52 或 3:30pm(02) DateFormat.MEDIUM较长,如 Jan 12, 1952(03) DateFormat.LONG更长,如 January 12, 1952 或 3:30:32pm(04) DateFormat.FULL是完全指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。

DateFormat 的定义如下public abstract class NumberFormat extends Format {}DateFormat 的函数接⼝默认构造函数:DateFormat()⾮构造函数:Object clone()boolean equals(Object object)abstract StringBuffer format(Date date, StringBuffer buffer, FieldPosition field)final StringBuffer format(Object object, StringBuffer buffer, FieldPosition field)final String format(Date date)static Locale[] getAvailableLocales()Calendar getCalendar()final static DateFormat getInstance()final static DateFormat getDateInstance()final static DateFormat getDateInstance(int style)final static DateFormat getDateInstance(int style, Locale locale)final static DateFormat getTimeInstance()final static DateFormat getTimeInstance(int style)final static DateFormat getTimeInstance(int style, Locale locale)final static DateFormat getDateTimeInstance()final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)NumberFormat getNumberFormat()TimeZone getTimeZone()int hashCode()boolean isLenient()Date parse(String string)abstract Date parse(String string, ParsePosition position)Object parseObject(String string, ParsePosition position)void setCalendar(Calendar cal)void setLenient(boolean value)void setNumberFormat(NumberFormat format)void setTimeZone(TimeZone timezone)注意:DateFormat是⼀个抽象类。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java 日期和时间字符串格式化
SimpleDateFormat类可以选择任何用户定义的日期-时间格式的模式。

但是,仍然建议通过DateFormat中的getTimeInstance、getDateInstance 或getDateTimeInstance 来创建日期-时间格式器。

每一个这样的类方法都能够返回一个以默认格式模式初始化的日期/时间格式器。

可以根据需要使用applyPattern方法来修改格式模式。

该构造方法可以使用参数pattern指定的格式创建一个对象,该对象调用format(Date date)方法格式化时间对象date。

需要注意的是,pattern中应当含有一些有效的字符序列。

例如:
●y或yy 表示使用两位数字来输出年份;yyyy表示使用4位数字输出年份。

●M或MM 表示使用两位数字或文本输出月份,如果使用汉字输出月份,pattern中应
连续包含至少3个M,例如MMM。

●d或dd 表示用两位数字输出日。

●H或HH 表示用两位数字输出小时。

●m或mm 表示用两位数字输出分。

●s或ss 表示用两位数字输出秒。

● E 表示用两位数字输出星期。

转换中文格式的时间的实例源代码如下所示:
执行上述代码,结果如图5-19所示。

图5-19 输出日期时间格式。

相关文档
最新文档