最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java日期處理之字符串轉(zhuǎn)換為日期的方法詳解

 更新時間:2025年05月15日 08:41:43   作者:Main12138  
在Java編程中,日期和時間的處理是一個常見的需求,下面我們就來聊聊如何將日期字符串轉(zhuǎn)換為日期對象,并從中提取有用的信息,如星期幾和一年中的第幾天

問題描述

輸入"2015-10-20",輸出:"2015年-10月-20日 是 星期二,是2015年的第293天"

解決方案

以下是完整的Java代碼實現(xiàn):

import java.util.Scanner;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
import java.time.DayOfWeek;
import java.time.temporal.ChronoField;

public class EnhancedDateConverter {
    
    private static final String[] WEEK_NAMES = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
    private static final DateTimeFormatter INPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy年-MM月-dd日");
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        while (true) {
            System.out.println("請輸入日期(格式: yyyy-MM-dd),輸入exit退出:");
            String input = sc.nextLine().trim();
            
            if ("exit".equalsIgnoreCase(input)) {
                break;
            }
            
            try {
                LocalDate date = parseDate(input);
                String formattedDate = formatDate(date);
                String weekDay = getChineseWeekDay(date);
                int dayOfYear = getDayOfYear(date);
                
                System.out.printf("%s 是 %s,是%d年的第 %d 天%n",
                        formattedDate, weekDay, date.getYear(), dayOfYear);
                
            } catch (DateTimeParseException e) {
                System.out.println("日期格式不正確,請使用 yyyy-MM-dd 格式");
            }
        }
        
        sc.close();
    }
    
    private static LocalDate parseDate(String dateStr) throws DateTimeParseException {
        return LocalDate.parse(dateStr, INPUT_FORMATTER);
    }
    
    private static String formatDate(LocalDate date) {
        return date.format(OUTPUT_FORMATTER);
    }
    
    private static String getChineseWeekDay(LocalDate date) {
        DayOfWeek dayOfWeek = date.getDayOfWeek();
        return WEEK_NAMES[dayOfWeek.getValue() % 7];
    }
    
    private static int getDayOfYear(LocalDate date) {
        return date.getDayOfYear();
    }
}

使用示例

請輸入日期(格式: yyyy-MM-dd),輸入exit退出:
2023-05-15
2023年-05月-15日 是 星期一,是2023年的第 135 天

請輸入日期(格式: yyyy-MM-dd),輸入exit退出:
2020-02-29
2020年-02月-29日 是 星期六,是2020年的第 60 天

請輸入日期(格式: yyyy-MM-dd),輸入exit退出:
2023-13-01
日期格式不正確,請使用 yyyy-MM-dd 格式

請輸入日期(格式: yyyy-MM-dd),輸入exit退出:
exit

方法補充

下面將探索幾種將String對象轉(zhuǎn)換為Date對象的方法。我們將從Java8中的DateTime開媽,然后再查看也用于表示日期的java.util.Date數(shù)據(jù)類型。

最后,我們將了解一下Joda-Time和Apache Commons Lang中DateUtils類進行轉(zhuǎn)換的外部庫。

1.將字符串轉(zhuǎn)換為 LocalDate or LocalDateTime

LocalDate和LocalDateTime是不可變的日期時間對象,分別表示日期、日期和時間。默認情況下,Java日期是ISO-8601格式,所以如何是我們有任何表示這種格式日期和時間的字符串,我們可以直接使用這些類的parse()API。

使用Parse API

Date-Time API提供parse()方法來解析包含日期和時間信息的String。要將String對象轉(zhuǎn)換為LocalDate和LocalDateTime對象,String必須表示有效的日期或時間,根據(jù)ISO_LOCAL_DATE或ISO_LOCAL_DATE_TIME。否則,將在運行時拋出DateTimeParseException。

下面的例子中我們將String轉(zhuǎn)換為LocalDate:

LocalDate date = LocalDate.parse("2018-05-05");

可以使用上述類似的方法將String轉(zhuǎn)換為LocalDateTime:

LocalDateTime dateTime = LocalDateTime.parse("2018-05-05T11:50:55");

需要注意的一點是LocalDate和LocalDateTime對象是時區(qū)不可知的。然而,當我們需要處理特定時區(qū)的日期和時間時,我們可以直接使用ZonedDateTime 的parse方法來獲取特定時區(qū)的日期時間:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss z");
ZonedDateTime zonedDateTime = ZonedDateTime.parse("2015-05-05 10:15:30 Europe/Paris", formatter);

現(xiàn)在讓我們看一下如何將字符串轉(zhuǎn)換為自定義格式。

使用Parse API 并自定義格式

將自定義格式的String轉(zhuǎn)換為Date對象是Java中常用的操作。

為此我們將使用DateTimeFormatter類,它提供了許多預定義的格式化程序,并允許我們自定義格式化。

讓我們從getDateTimeFormatter的預定義格式開始:

String dateInString = "19590709";
LocalDate date = LocalDate.parse(dateInString, DateTimeFormatter.BASIC_ISO_DATE);

在下一個示例中,讓我們創(chuàng)建一個格式為“EEE, d MMM yyyy”的日期格式。此格式指定三個字符作為星期的全程,一個數(shù)字表示月份中的日期,三個字符表示月份,四位數(shù)字表示年份。

此格式化可識別諸如:"Fri, 3 Jan 2003"或"Wed, 23, Mar 1994"之類的字符串。

String dateInString = "Mon, 05 May 1980";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE, d MMM yyyy", Locale.ENGLISH);
LocalDate dateTime = LocalDate.parse(dateInString, formatter);

常用的日期和時間格式

讓我們看一下幾個常用的日期和時間格式:

  • y – Year (1996; 96)
  • M – Month in year (July; Jul; 07)
  • d – Day in month (1-31)
  • E – Day name in week (Friday, Sunday)
  • a AM/PM marker (AM, PM)
  • H – Hour in day (0-23)
  • h – Hour in AM/PM (1-12)
  • m – Minute in hour (0-60)
  • s – Second in minute (0-60)

2.將字符串轉(zhuǎn)換為 java.util.Date

在Java8之前,Java日期和時間機制由java.util.Date、java.util.Calendar和java.util.TimeZone類的舊API提供,我們有時仍然需要使用它。

讓我們看一下如何將String轉(zhuǎn)換為java.util.Date對象。

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);

String dateInString = "7-Jun-2013";
Date date = formatter.parse(dateInString);

在上面的例子中,我們首先需要通過傳遞描述日期和時間格式的模式來構(gòu)造一個SimpleDateFormat對象。

接下來我們需要調(diào)用傳遞日期String的parse()方法。如果傳遞的String參數(shù)與模式的格式不同,則會拋出ParseException。

設(shè)置時區(qū)信息 *java.util.Date

需要注意的是,java.util.Date沒有時區(qū)概念,僅表示自1970-01-01T00:00:00Z以來經(jīng)過的秒數(shù)。

但是,當我們直接打印Date對象時,它總是會打印Java默認的系統(tǒng)時區(qū)。

在下面這個示例中,我們將了解如何在添加時區(qū)信息的同時格式化日期:

SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss a", Locale.ENGLISH);
formatter.setTimeZone(TimeZone.getTimeZone("America/New_York"));

String dateInString = "22-01-2015 10:15:55 AM"; 
Date date = formatter.parse(dateInString);
String formattedDateString = formatter.format(date);

我們也可以通過編程的方式更改JVM的時區(qū)信息,但是不推薦這么做:

TimeZone.setDefault(TimeZone.getTimeZone("GMT"));

3.使用第三方庫

現(xiàn)在我們已經(jīng)很好地理解了如何使用核心Java提供的新舊API將String對象轉(zhuǎn)換為Date對象,下面讓我們來看一些外部庫。

Joda-Time Library

Joda-Time是核心Java Date和Time庫的替代品。盡管作者現(xiàn)在建議用戶移到JSR-310,但如果短期內(nèi)做不到,Joda-TIme庫提供了處理日期和時間的絕佳替代方法。該庫幾乎提供了Java8 Date Time項目支持的所有功能。

首先需要在項目中添加依賴:

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.10</version>
</dependency>

下面是一個使用標準DateTime的簡單示例:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);

讓我們來看一下顯式設(shè)置時區(qū)的例子:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss");

String dateInString = "07/06/2013 10:11:59";
DateTime dateTime = DateTime.parse(dateInString, formatter);
DateTime dateTimeWithZone = dateTime.withZone(DateTimeZone.forID("Asia/Kolkata"));

Apache Commons Lang – DateUtils

DateUtils類提供了許多有用的實用方法,讓我們在使用舊版的Calendar和Date對象時更加容易。

使用前先添加依賴:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

讓我們使用定義在數(shù)組中的日期模式將String轉(zhuǎn)換為Date:

String dateInString = "07/06-2013";
Date date = DateUtils.parseDate(dateInString, new String[] { "yyyy-MM-dd HH:mm:ss", "dd/MM-yyyy" });

到此這篇關(guān)于Java日期處理之字符串轉(zhuǎn)換為日期的方法詳解的文章就介紹到這了,更多相關(guān)Java字符串轉(zhuǎn)日期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中對象的比較操作實例分析

    Java中對象的比較操作實例分析

    這篇文章主要介紹了Java中對象的比較操作,結(jié)合實例形式分析了java對象比較操作實現(xiàn)方法與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-08-08
  • Java實現(xiàn)自動生成縮略圖片

    Java實現(xiàn)自動生成縮略圖片

    這篇文章主要為大家詳細介紹了Java實現(xiàn)自動生成縮略圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 詳解Mybatis(五)Mapper接口

    詳解Mybatis(五)Mapper接口

    這篇文章主要介紹了Mybatis Mapper接口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • SpringBoot與單元測試JUnit的結(jié)合操作

    SpringBoot與單元測試JUnit的結(jié)合操作

    這篇文章主要介紹了SpringBoot與單元測試JUnit的結(jié)合操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中String字符串常量池和intern方法源碼分析

    Java中String字符串常量池和intern方法源碼分析

    在之前的文章中,小編給大家介紹了String字符串的不可變性及其實現(xiàn)原理,其中給大家提到了字符串常量池的概念,那么什么是常量池,String字符串與常量池有什么關(guān)系,本文給大家嘮嘮字符串常量池及String#intern()方法的作用,需要的朋友可以參考下
    2023-05-05
  • 詳解如何在React中逃離閉包陷阱

    詳解如何在React中逃離閉包陷阱

    眾所周知,JavaScript 中的閉包(Closures)一定是這種語言最可怕的特性之一,另外它可能也是最隱蔽的語言特性之一,我們在編寫 React 代碼時經(jīng)常會用到它,但是大多數(shù)時候我們甚至沒有意識到這一點,本文小編將和大家一起深入探討如何在React中逃離閉包陷阱
    2023-09-09
  • Spring?Boot使用HMAC-SHA256對訪問密鑰加解密

    Spring?Boot使用HMAC-SHA256對訪問密鑰加解密

    本文主要介紹了使用HMAC-SHA256算法進行客戶端和服務端之間的簽名驗簽,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-12-12
  • 淺析Java中的內(nèi)存泄漏

    淺析Java中的內(nèi)存泄漏

    這篇文章主要介紹了Java中的內(nèi)存泄漏,包括其基本概念和基本的預防措施,需要的朋友可以參考下
    2015-07-07
  • Java中List.stream()的全面使用指南(附完整示例)

    Java中List.stream()的全面使用指南(附完整示例)

    在Java中List是一種常用的集合類型,使用List的stream方法可以方便地對其中的元素進行各種操作,這篇文章主要介紹了Java中List.stream()的全面使用指南,需要的朋友可以參考下
    2025-08-08
  • Spring Boot中的日志log原理與自定義日志格式

    Spring Boot中的日志log原理與自定義日志格式

    這篇文章主要介紹了Spring Boot中的日志log原理與自定義日志格式,本文將介紹一種日志追蹤的方式,來全鏈路追蹤請求的處理,并設(shè)置相應的格式,輸出更加直觀、易處理的日志,需要的朋友可以參考下
    2026-02-02

最新評論

鄯善县| 长顺县| 民丰县| 搜索| 栾城县| 新晃| 军事| 时尚| 仪陇县| 金寨县| 教育| 南康市| 财经| 高安市| 阜康市| 宁波市| 会理县| 和平区| 桐城市| 罗甸县| 信丰县| 利川市| 巴青县| 乌兰察布市| 平度市| 文昌市| 甘洛县| 贵定县| 水富县| 周至县| 景泰县| 青岛市| 泰和县| 新安县| 大悟县| 都匀市| 屏山县| 桂东县| 太康县| 邵武市| 如皋市|