Java字符串到日期的转换

Wesley13
• 阅读 370

用Java将“ 2010年1月2日”格式的String转换为Date的最佳方法是什么?

最终,我想将月份,日期和年份分解为整数,以便可以使用

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

将日期转换为时间。


#1楼

而且,某些客户端技术(例如GWT )不提供SimpleDateFormat。

选择Calendar.getInstance()是个好主意,您的要求是比较两个日期。 长时间约会。


#2楼

String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);

#3楼

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013

    String output = dateFormat.format(date);
    System.out.println(output); // 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

这对我来说可以。


#4楼

尽管某些答案在技术上是正确的,但不建议这样做。

  • 众所周知,java.util.Date和Calendar类很麻烦。 由于设计和实现中的缺陷,请避免它们。 幸运的是,我们可以选择其他两个出色的日期时间库:
    • 乔达时代
      这个流行的开源免费库可在多个Java版本中使用。 在StackOverflow上可以找到其用法的许多示例。 阅读其中一些内容将帮助您快速上手。
    • java.time。*包
      这些新的类集受到Joda-Time的启发,并由JSR 310定义。这些类内置于Java 8中。正在进行将这些类向后移植到Java 7的项目,但是Oracle不支持向后移植。
  • 正如克里斯托弗·约翰逊(Kristopher Johnson)在对该问题的评论中正确指出的那样,其他答案忽略了以下重要问题:
    • 一天中的时间
      日期同时具有日期部分和时间部分)
    • 时区
      一天的开始取决于时区。 如果您未能指定时区,那么将应用JVM的默认时区。 这意味着当在其他计算机上运行或使用修改的时区设置时,代码的行为可能会更改。 可能不是您想要的。
    • 语言环境
      语言环境的语言指定了如何解析在解析过程中遇到的单词(月和日的名称)。 ( BalusC答案正确地解决了这一问题。)此外,在生成日期时间的字符串表示形式时,语言环境会影响某些格式器的输出。

乔达时代

有关Joda-Time的一些注意事项如下。

时区

Joda-Time中DateTime对象真正知道其自己分配的时区。 这与java.util.Date类形成了对比,后者_似乎_有一个时区,但没有。

请注意,在下面的示例代码中,我们如何将时区对象传递给解析字符串的格式化程序。 该时区用于将日期时间解释为发生在该时区中。 因此,您需要考虑并确定该字符串输入所代表的时区。

由于输入字符串中没有时间部分,因此Joda-Time会将指定时区中一天的第一时刻指定为一天中的时间。 由于夏令时(DST)或其他异常,通常这表示00:00:00但并非总是如此。 顺便说一句,您可以通过调用withTimeAtStartOfDay对任何DateTime实例执行相同的withTimeAtStartOfDay

格式化程序模式

在Joda-Time中,格式化程序模式中使用的字符与java.util.Date/Calendar中的字符相似,但并不完全相同。 仔细阅读文档。

不变性

我们通常在Joda-Time中使用不可变的类。 而不是修改现有的Date-Time对象,我们调用的方法是基于另一个对象创建一个新的新实例,并复制了大多数方面,除非需要进行更改。 下面的最后一行是对withZone的调用。 不变性有助于使Joda-Time非常线程安全,还可以使某些工作更加清晰。

转换次数

您将需要java.util.Date对象,以与其他不了解Joda-Time对象的类/框架一起使用。 幸运的是,来回移动非常容易。

从java.util.Date对象(此处称为date )到Joda-Time DateTime…

org.joda.time.DateTime dateTime = new DateTime( date, timeZone );

从Joda-Time转到java.util.Date对象的另一方向…

java.util.Date date = dateTime.toDate();

样例代码

String input = "January 2, 2010";

java.util.Locale locale = java.util.Locale.US;
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
DateTime dateTime = formatter.parseDateTime( input );

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );

运行时...

dateTime: 2010-01-02T00:00:00.000-10:00
dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z

#5楼

使用Java 8,我们获得了一个新的日期/时间API( JSR 310 )。

可以使用以下方式在Java 8中解析日期,而无需依赖Joda-Time

 String str = "January 2nd, 2010";

// if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(str, formatter);

// access date fields
int year = date.getYear(); // 2010
int day = date.getDayOfMonth(); // 2
Month month = date.getMonth(); // JANUARY
int monthAsInt = month.getValue(); // 1

LocalDate是用于表示日期(无时间)的标准Java 8类。 如果要解析包含日期和时间信息的值,则应使用LocalDateTime 。 对于具有时区的值,请使用ZonedDateTime 。 两者都提供类似于LocalDateparse()方法:

LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);

DateTimeFormatter Javadoc中的列表格式字符:

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
The following pattern letters are defined:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 G       era                         text              AD; Anno Domini; A
 u       year                        year              2004; 04
 y       year-of-era                 year              2004; 04
 D       day-of-year                 number            189
 M/L     month-of-year               number/text       7; 07; Jul; July; J
 d       day-of-month                number            10

 Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
 Y       week-based-year             year              1996; 96
 w       week-of-week-based-year     number            27
 W       week-of-month               number            4
 E       day-of-week                 text              Tue; Tuesday; T
 e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
 F       week-of-month               number            3

 a       am-pm-of-day                text              PM
 h       clock-hour-of-am-pm (1-12)  number            12
 K       hour-of-am-pm (0-11)        number            0
 k       clock-hour-of-am-pm (1-24)  number            0

 H       hour-of-day (0-23)          number            0
 m       minute-of-hour              number            30
 s       second-of-minute            number            55
 S       fraction-of-second          fraction          978
 A       milli-of-day                number            1234
 n       nano-of-second              number            987654321
 N       nano-of-day                 number            1234000000

 V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
 z       time-zone name              zone-name         Pacific Standard Time; PST
 O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
 X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
 x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
 Z       zone-offset                 offset-Z          +0000; -0800; -08:00;
点赞
收藏
评论区
推荐文章
秃头王路飞 秃头王路飞
5个月前
webpack5手撸vue2脚手架
webpack5手撸vue相信工作个12年的小伙伴们在面试的时候多多少少怕被问到关于webpack方面的知识,本菜鸟最近闲来无事,就尝试了手撸了下vue2的脚手架,第一次发帖实在是没有经验,望海涵。languageJavaScript"name":"vuecliversion2","version":"1.0.0","desc
浅梦一笑 浅梦一笑
5个月前
初学 Python 需要安装哪些软件?超级实用,小白必看!
编程这个东西是真的奇妙。对于懂得的人来说,会觉得这个工具是多么的好用、有趣,而对于小白来说,就如同大山一样。其实这个都可以理解,大家都是这样过来的。那么接下来就说一下python相关的东西吧,并说一下我对编程的理解。本人也是小白一名,如有不对的地方,还请各位大神指出01名词解释:如果在编程方面接触的比较少,那么对于软件这一块,有几个名词一定要了解,比如开发环
blmius blmius
1年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
技术小男生 技术小男生
5个月前
linux环境jdk环境变量配置
1:编辑系统配置文件vi/etc/profile2:按字母键i进入编辑模式,在最底部添加内容:JAVAHOME/opt/jdk1.8.0152CLASSPATH.:$JAVAHOME/lib/dt.jar:$JAVAHOME/lib/tools.jarPATH$JAVAHOME/bin:$PATH3:生效配置
光头强的博客 光头强的博客
5个月前
Java面向对象试题
1、请创建一个Animal动物类,要求有方法eat()方法,方法输出一条语句“吃东西”。创建一个接口A,接口里有一个抽象方法fly()。创建一个Bird类继承Animal类并实现接口A里的方法输出一条有语句“鸟儿飞翔”,重写eat()方法输出一条语句“鸟儿吃虫”。在Test类中向上转型创建b对象,调用eat方法。然后向下转型调用eat()方
刚刚好 刚刚好
5个月前
css问题
1、在IOS中图片不显示(给图片加了圆角或者img没有父级)<div<imgsrc""/</divdiv{width:20px;height:20px;borderradius:20px;overflow:h
小森森 小森森
5个月前
校园表白墙微信小程序V1.0 SayLove -基于微信云开发-一键快速搭建,开箱即用
后续会继续更新,敬请期待2.0全新版本欢迎添加左边的微信一起探讨!项目地址:(https://www.aliyun.com/activity/daily/bestoffer?userCodesskuuw5n)\2.Bug修复更新日历2.情侣脸功能大家不要使用了,现在阿里云的接口已经要收费了(土豪请随意),\\和注意
晴空闲云 晴空闲云
5个月前
css中box-sizing解放盒子实际宽高计算
我们知道传统的盒子模型,如果增加内边距padding和边框border,那么会撑大整个盒子,造成盒子的宽度不好计算,在实务中特别不方便。boxsizing可以设置盒模型的方式,可以很好的设置固定宽高的盒模型。盒子宽高计算假如我们设置如下盒子:宽度和高度均为200px,那么这会这个盒子实际的宽高就都是200px。但是当我们设置这个盒子的边框和内间距的时候,那
艾木酱 艾木酱
5个月前
快速入门|使用MemFire Cloud构建React Native应用程序
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专
NVIDIA安培架构下MIG技术分析
关键词:NVIDIA、MIG、安培一什么是MIG2020年5月,NVIDIA发布了最新的GPU架构:安培,以及基于安培架构的最新的GPU:A100。安培提供了许多新的特性,MIG是其中一项非常重要的新特性。MIG的全名是MultiInstanceGPU。NVIDIA安培架构中的MIG模式可以在A100GPU上并行运行七个作业。多实
helloworld_28799839 helloworld_28799839
5个月前
常用知识整理
Javascript判断对象是否为空jsObject.keys(myObject).length0经常使用的三元运算我们经常遇到处理表格列状态字段如status的时候可以用到vue