在 Java 中将格式为“2 年 2010 月 <> 日”格式的 a 转换为 a 的最佳方法是什么?String
Date
最终,我想将月、日和年分解为整数,以便我可以使用
Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();
将日期转换为时间。
网友回答:
啊,是的,Java Date讨论,再次。为了处理日期操作,我们使用Date,Calendar,GregorianCalendar和SimpleDateFormat。例如,使用您的 1 月日期作为输入:
Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year -> "+mydate.get(Calendar.YEAR));
System.out.println("month -> "+mydate.get(Calendar.MONTH));
System.out.println("dom -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod -> "+mydate.get(Calendar.HOUR_OF_DAY));
然后你可以用这样的东西来操作它:
Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year -> "+mydate.get(Calendar.YEAR));
System.out.println("month -> "+mydate.get(Calendar.MONTH));
System.out.println("dom -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod -> "+mydate.get(Calendar.HOUR_OF_DAY));
网友回答:
这是一条艰难的方式,自Java 1.1(1997)以来,这些setter方法已被弃用。此外,自从在Java 8(2014)中引入API以来,整个类实际上已被弃用(不推荐)。java.util.Date
java.util.Date
java.time
只需使用与输入字符串匹配的模式来格式化日期(此处提供了教程)。DateTimeFormatter
在“2 年 2010 月 <> 日”作为输入字符串的特定情况下:
MMMM
d
yyyy
String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02
注意:如果您的格式模式恰好也包含时间部分,请使用代替 。而且,如果您的格式模式恰好也包含时区,请改用。LocalDateTime#parse(text, formatter)
LocalDate#parse(text, formatter)
ZonedDateTime#parse(text, formatter)
以下是 javadoc 的相关性摘录,列出了所有可用的格式模式:
象征 | 意义 | 介绍 | 例子 |
---|---|---|---|
G |
时代 | 发短信 | 广告;公元;一个 |
u |
年 | 年 | 2004;04 |
y |
时代年份 | 年 | 2004;04 |
D |
一年中的某一天 | 数 | 189 |
M /L |
一年中的月份 | 数字/文本 | 7;07;七月;七月;J |
d |
月中的某天 | 数 | 10 |
Q /q |
季度 | 数字/文本 | 3;03;问3;第三季度 |
Y |
基于周的年份 | 年 | 1996;96 |
w |
基于周的年份 | 数 | 27 |
W |
月中的一周 | 数 | 4 |
E |
星期几 | 发短信 | 星期二;星期二;T |
e /c |
本地化的星期几 | 数字/文本 | 2;02;星期二;星期二;T |
F |
月中的一周 | 数 | 3 |
a |
上午下午 | 发短信 | 下午 |
h |
上午一小时下午时钟 (1-12) | 数 | 12 |
K |
下午一小时 (0-11) | 数 | 0 |
k |
上午一小时下午时钟 (1-24) | 数 | 0 |
H |
一天中的小时 (0-23) | 数 | 0 |
m |
小时分 | 数 | 30 |
s |
分钟数秒 | 数 | 55 |
S |
秒分之一 | 分数 | 978 |
A |
一天中的毫秒 | 数 | 1234 |
n |
纳秒级 | 数 | 987654321 |
N |
纳米日间 | 数 | 1234000000 |
V |
时区标识 | 区域标识 | 美洲/Los_Angeles;Z;-08:30 |
z |
时区名称 | 区域名称 | 太平洋标准时间;太平洋标准时间 |
O |
局部区域偏移 | 偏移-O | 格林威治标准时间+8;格林威治标准时间+08:00;世界协调时-08:00; |
X |
区域偏移“Z”表示零 | 偏移量-X | Z;-08;-0830;-08:30;-083015;-08:30:15; |
x |
区域偏移 | 偏移量-X | +0000;-08;-0830;-08:30;-083015;-08:30:15; |
Z |
区域偏移 | 偏移-Z | +0000;-0800;-08:00; |
请注意,它有几个针对更流行模式的预定义格式化程序。因此,您可以使用 .这是可能的,因为它们与线程安全相反。因此,如有必要,您也可以定义自己的定义。DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);
DateTimeFormatter.RFC_1123_DATE_TIME
SimpleDateFormat
对于特定的输入字符串格式,您不需要使用显式:标准的ISO 8601日期,如2016-09-26T17:44:57Z,可以直接解析,因为它已经使用了格式化程序。同样, 分析不带时间分量的 ISO 日期(请参阅),并分析添加了偏移量和时区的 ISO 日期(请参阅)。DateTimeFormatter
LocalDateTime#parse(text)
ISO_LOCAL_DATE_TIME
LocalDate#parse(text)
ISO_LOCAL_DATE
ZonedDateTime#parse(text)
ISO_ZONED_DATE_TIME
如果您尚未使用 Java 8,或者被迫使用 ,请使用与输入字符串匹配的格式模式来格式化日期。java.util.Date
SimpleDateFormat
String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010
请注意显式参数的重要性。如果省略它,那么它将使用默认区域设置,该区域设置不一定是输入字符串的月份名称中使用的英语。如果区域设置与输入字符串不匹配,那么即使格式模式似乎有效,您也会令人困惑地得到一个。Locale
java.text.ParseException
以下是 javadoc 的相关性摘录,列出了所有可用的格式模式:
信 | 日期或时间组件 | 介绍 | 例子 |
---|---|---|---|
G |
时代指示符 | 发短信 | 广告 |
y |
年 | 年 | 1996;96 |
Y |
周年 | 年 | 2009;09 |
M /L |
一年中的月份 | 月 | 七月;七月;07 |
w |
一年中的一周 | 数 | 27 |
W |
每月的周 | 数 | 2 |
D |
一年中的一天 | 数 | 189 |
d |
月中的一天 | 数 | 10 |
F |
每月中的星期几 | 数 | 2 |
E |
星期几 | 发短信 | 星期二;星期二 |
u |
周数 | 数 | 1 |
a |
上午/下午标记 | 发短信 | 下午 |
H |
一天中的小时 (0-23) | 数 | 0 |
k |
一天中的小时 (1-24) | 数 | 24 |
K |
上午/下午的小时数 (0-11) | 数 | 0 |
h |
上午/下午的小时数 (1-12) | 数 | 12 |
m |
分钟数(小时) | 数 | 30 |
s |
秒分 | 数 | 55 |
S |
毫秒 | 数 | 978 |
z |
时区 | 一般时区 | 太平洋标准时间;太平洋标准时间;格林威治标准时间-08:00 |
Z |
时区 | RFC 822 时区 | -0800 |
X |
时区 | ISO 8601 时区 | -08;-0800;-08:00 |
请注意,模式区分大小写,四个或更多字符的基于文本的模式表示完整形式;否则,如果可用,则使用简短或缩写形式。所以例如 或更多是不必要的。MMMMM
以下是迄今为止解析给定字符串的有效模式的一些示例:SimpleDateFormat
输入字符串 | 模式 |
---|---|
2001.07.04 AD at 12:08:56 PDT | yyyy.MM.dd G 'at' HH:mm:ss z |
周三, 4月 01, ‘<> | EEE, MMM d, ''yy |
下午12:08 | h:mm a |
太平洋夏令时间中午 12 点 | hh 'o''clock' a, zzzz |
下午 0:08,太平洋夏令时 | K:mm a, z |
02001.七月.04 AD 12:08 下午 | yyyyy.MMMM.dd GGG hh:mm aaa |
周三, 4 七月 2001 12:08:56 -0700 | EEE, d MMM yyyy HH:mm:ss Z |
010704120856-0700 | yyMMddHHmmssZ |
2001-07-04T12:08:56.235-0700 | yyyy-MM-dd'T'HH:mm:ss.SSSZ |
2001-07-04T12:08:56.235-07:00 | yyyy-MM-dd'T'HH:mm:ss.SSSXXX |
2001年W27-3 | YYYY-'W'ww-u |
重要的注意事项是,这不是线程安全的。换句话说,您永远不应该将其声明并分配为静态或实例变量,然后从不同的方法/线程重用它。应始终在本地方法范围内创建全新的它。SimpleDateFormat
网友回答:
String str_date = "11-June-07";
DateFormat formatter = new SimpleDateFormat("dd-MMM-yy");
Date date = formatter.parse(str_date);
模板简介:该模板名称为【在 Java 中将月、日和年分解为整数最佳方法是什么?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Java】栏目查找您需要的精美模板。