使用Java从String中检索Month,Day和Year值

usp*_*usp 14 java string date

如何从字符串中提取日,月和年值[如18/08/2012].我尝试使用SimpleDateFormat,但它返回一个Date对象,我发现所有的Get方法都已弃用.有没有更好的方法来做到这一点?

谢谢

Jon*_*eet 22

就个人而言,我会使用Joda Time,这会让生活变得更加简单.特别是,这意味着您不必担心与时区相关的Calendar时区SimpleDateFormat- 您只需解析为a LocalDate,这就是数据真正向您显示的内容.这也意味着您不必担心几个月基于0 :)

Joda Time使许多日期/时间操作更加愉快.

import java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;

public class Test {

    public static void main(String[] args) throws Exception {
        DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy")
            .withLocale(Locale.UK);

        LocalDate date = formatter.parseLocalDate("18/08/2012");

        System.out.println(date.getYear());  // 2012
        System.out.println(date.getMonthOfYear()); // 8
        System.out.println(date.getDayOfMonth());   // 18
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 15

只需去String.split(),

String str[] = "18/08/2012".split("/");
int day = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
..... and so on
Run Code Online (Sandbox Code Playgroud)


Sru*_*lla 8

这可以让你无需添加外部罐子

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
Date parse = sdf.parse("18/08/2012");  
Calendar c = Calendar.getInstance();  
c.setTime(parse);  
System.out.println(c.get(Calendar.MONTH) + c.get(Calendar.DATE) + c.get(Calendar.YEAR)); 
Run Code Online (Sandbox Code Playgroud)


Bas*_*que 6

太长了;博士

\n\n
java.time.LocalDate.parse(\n    "18/08/2012" , \n    DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) \n).getDayOfMonth\xe2\x80\x8b() // .getYear\xe2\x80\x8b() .getMonth()\n
Run Code Online (Sandbox Code Playgroud)\n\n

java.time

\n\n

现代方法使用java.time类。避免麻烦的遗留类,例如Date& Calendar

\n\n

LocalDate

\n\n
String input = "18/08/2012" ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

该类LocalDate表示仅日期值,没有时间和时区。

\n\n
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;\nLocalDate ld = LocalDate.parse( input , f ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

ld.toString(): 2012-08-18

\n
\n\n

吸气剂方法

\n\n

询问零件。

\n\n
int d = ld.getDayOfMonth\xe2\x80\x8b() ;\nint m = ld.getMonthValue() ;\nint y = ld.getYear() ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

关于 java.time

\n\n

java.time框架内置于 Java 8 及更高版本中这些类取代了麻烦的旧遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat

\n\n

Joda -Time项目现在处于维护模式,建议迁移到java.time类。

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

从哪里获取 java.time 类?

\n\n\n\n

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、、等等。YearWeekYearQuarter

\n


Vik*_*dor 5

在该日期之外创建一个java.util.Calendar对象,如下所示,并提取日期部分:

Calendar cal = Calendar.getInstance();
cal.setTime(<date from simple-date-format).
cal.get(Calendar.MONTH);
Run Code Online (Sandbox Code Playgroud)

等等.,

  • 请注意,这意味着你必须确保 `SimpleDateFormat` 和 `Calendar` 使用相同的时区,否则你会得到错误的值。最好坚持使用*仅*处理日期的类型,IMO。 (2认同)