Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为java.util.date_Java_Date_Date Conversion - Fatal编程技术网

将字符串转换为java.util.date

将字符串转换为java.util.date,java,date,date-conversion,Java,Date,Date Conversion,我正在处理需要转换为java.util.date对象的日期字符串 我使用以下代码来执行此操作: public void setDates(String from, String to) throws ParseException { Date fromDate = new Date(); Date toDate = new Date(); SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); from

我正在处理需要转换为java.util.date对象的日期字符串

我使用以下代码来执行此操作:

public void setDates(String from, String to) throws ParseException
{
    Date fromDate = new Date();
    Date toDate = new Date();
    SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");

    fromDate = df.parse(from);
    toDate = df.parse(to);

    this.setDepartDate(fromDate);
    this.setReturnDate(toDate);
}
问题是,我必须转换的字符串值总是(我无法控制)以下列格式:“2013年9月20日”

这导致我的函数在到达
fromDate=df.parse(from)时通过ParseException

有谁能帮我理解原因,并提出解决方案吗?

查看可用的格式选项,但基本上,您需要将日期格式更改为类似于
dd-MMMM,yyyy

try {
    String dateValue = "20 September, 2013";
    SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
    Date date = df.parse(dateValue);
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}
哪个输出

Fri Sep 20 00:00:00 EST 2013
查看可用的格式选项,但基本上,您需要将日期格式更改为类似于
dd-MMMM,yyyy

try {
    String dateValue = "20 September, 2013";
    SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
    Date date = df.parse(dateValue);
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}
哪个输出

Fri Sep 20 00:00:00 EST 2013
你写的

[…]格式如下:“2013年9月20日”

那么您的
simpleDataFormat
应该是

"dd MMM, yyyy"
您可以查看您编写的。

[…]格式如下:“2013年9月20日”

那么您的
simpleDataFormat
应该是

"dd MMM, yyyy"
您可以按照以下格式签出。

SimpleDateFormat df = new SimpleDateFormat("dd MMMMM, yyyy");
还要确定是否需要进行此解析,以及是否需要严格使用
setLenient(false)

默认情况下,解析是宽松的:如果输入不是使用的形式 通过此对象的format方法,但仍然可以解析为日期,然后 解析成功。客户可能会坚持严格遵守 通过调用setLenient设置格式(false)

还要注意,
SimpleDateFormat
不是线程安全的。如果有一个选择,我建议使用它提供更多增强的功能

按照以下格式使用

SimpleDateFormat df = new SimpleDateFormat("dd MMMMM, yyyy");
还要确定是否需要进行此解析,以及是否需要严格使用
setLenient(false)

默认情况下,解析是宽松的:如果输入不是使用的形式 通过此对象的format方法,但仍然可以解析为日期,然后 解析成功。客户可能会坚持严格遵守 通过调用setLenient设置格式(false)


还要注意,
SimpleDateFormat
不是线程安全的。如果有一个选择,我建议使用它提供更多增强的功能

解析日期时,需要了解一些上下文或使用一些假设。您可以使用SimpleDataFormat,但在使用字符串之前,可能需要预解析字符串以查看其格式。您可能需要尝试多种格式,以查看是否有一种或多种方法可以解析日期


顺便说一句,1930年2月1日或2030年1月2日或2001年2月30日是01/02/30,您需要了解该日期可能意味着什么,或者对格式有一些控制。

解析日期时,您需要了解一些上下文或使用一些假设。您可以使用SimpleDataFormat,但在使用字符串之前,可能需要预解析字符串以查看其格式。您可能需要尝试多种格式,以查看是否有一种或多种方法可以解析日期


顺便说一句,1930年2月1日或2030年1月2日或2001年2月30日是01/02/30,您需要了解日期的含义或对格式有一定的控制。

您需要使用以下日期模式
dd MMMM,yyyy

try {
    String dateValue = "20 September, 2013";
    SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
    Date date = df.parse(dateValue);
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}
试试这个代码

        String dateValue = "20 September, 2013";
        // Type of different Month views        
        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy"); //20 September, 2013
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM, yyyy");  //20 09, 2013
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM, yyyy"); //20 Sep, 2013 
        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Sep 20 00:00:00 IST 2013

您需要使用以下日期模式,
dd-MMMM,yyyy

try {
    String dateValue = "20 September, 2013";
    SimpleDateFormat df = new SimpleDateFormat("dd MMMM, yyyy");
    Date date = df.parse(dateValue);
    System.out.println(date);
} catch (ParseException exp) {
    exp.printStackTrace();
}
试试这个代码

        String dateValue = "20 September, 2013";
        // Type of different Month views        
        SimpleDateFormat sdf = new SimpleDateFormat("dd MMMM, yyyy"); //20 September, 2013
        SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM, yyyy");  //20 09, 2013
        SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMM, yyyy"); //20 Sep, 2013 
        Date date = sdf.parse(dateValue); // returns date object
        System.out.println(date); // outputs: Fri Sep 20 00:00:00 IST 2013
LocalDate
现代方法使用java.time类取代了几年前麻烦的旧日期时间类(
date
Calendar
,等等)

String input = "20 September, 2013" ;
Locale locale = Locale.US ; // Determines the human language and cultural norms used in parsing the input string. 
DateTimeFormatter f = DateTimeFormatter.ofPattern( "d MMMM, uuuu" , locale ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
看这个

ld.toString():2013-09-20

ZoneDateTime
如果希望一天中的某个时间具有该日期,例如一天中的第一个时刻,则必须指定时区。时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

如果未指定时区,JVM将隐式应用其当前默认时区。该默认值可能在运行时(!)期间出现,因此您的结果可能会有所不同。最好将[desired/expected time zone][2]明确指定为参数

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

应用该
ZoneId
以获取
zoneDateTime
。永远不要假设一天从00:00:00开始。夏时制(DST)等异常意味着一天可能在另一个时间开始,如01:00:00。让java.time确定一天中的第一个时刻

ZonedDateTime zdt = ld.atStartOfDay( z ) ;
Instant
要调整为UTC,请提取一个
即时值

Instant instant = zdt.toInstant() ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*

从哪里获得java.time类

  • 然后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 更高版本的Android捆绑包实现了java.time类
    • 对于早期的Android(
      LocalDate
      现代方法使用java.time类来支持