如何在 java 中获取字符串的特定部分
How to get a specific part of a string in java
我正在开发一个 Android 应用程序,它可以从互联网上获取日期。我拥有的是像这样的完整日期格式:2020-06-13T16:21:15.239920+02:00
。我想得到一个月中的第几天(在这种情况下是 13)。
String str = "2020-06-13T16:21:15.239920+02:00";
String substr = "";
// prints the substring after index 7(8 includes) till index 9(10 excludes)
substr = str.substring(8, 10);
拆分字符串并提取数据总是一个坏主意,因为一旦日期、月份或日期字符串的任何部分发生变化,字符串就会更改为其他值,并且字符串索引也会发生变化
所以使用DateTimeFormatter
import java.time.MonthDay;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class SDF {
public static void main(String[] args) {
final TemporalAccessor parse = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSxxx")
.parse("2020-06-13T16:21:15.239920+02:00");
int dayOfMonth = MonthDay.from(parse).getDayOfMonth();
System.out.println(dayOfMonth);
}
}
您的 date/time 字符串符合 DateTimeFormatter.ISO_OFFSET_DATE_TIME
。您可以使用 java.time
API 来获取月份中的第几天,如下所示:
import java.time.OffsetDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-06-13T16:21:15.239920+02:00";
OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr);
int day = odt.getDayOfMonth();
System.out.println(day);
}
}
输出:
13
如果不能使用Java SE 8 Date and Time, check ThreeTenABP and also .
如果您至少使用 API 级别 26,那么您可以使用 ZonedDateTime
class,因为您的字符串使用 class 可以理解的默认格式.
ZonedDateTime zdt = ZonedDateTime.parse("2020-06-13T16:21:15.239920+02:00");
int d = zdt.getDayOfMonth();
或者,如果格式不变,只需使用方法 substring()
String dd = "2020-06-13T16:21:15.239920+02:00".substring(8, 10);
如果格式不稳定,我建议 regular expression or combining ZonedDateTime
with DateTimeFormatter
应该有一个方法getDayOfMonth()
可用于此变量
private int parseDate(ZonedDateTime date) {
int day = date.getDayOfMonth();
return day;
}
您可以使用字符串拆分。只需将整个日期格式放入字符串中,然后创建一个 new String Array String[] array= str.split("[-T]");
然后你就可以从 array[2]
.[=13 中得到结果=]
String str = "2020-06-13T16:21:15.239920+02:00";
String[] array= str.split("[-T]");
System.out.println("OUTPUT: " + array[2]);
输出:13
我正在开发一个 Android 应用程序,它可以从互联网上获取日期。我拥有的是像这样的完整日期格式:2020-06-13T16:21:15.239920+02:00
。我想得到一个月中的第几天(在这种情况下是 13)。
String str = "2020-06-13T16:21:15.239920+02:00";
String substr = "";
// prints the substring after index 7(8 includes) till index 9(10 excludes)
substr = str.substring(8, 10);
拆分字符串并提取数据总是一个坏主意,因为一旦日期、月份或日期字符串的任何部分发生变化,字符串就会更改为其他值,并且字符串索引也会发生变化
所以使用DateTimeFormatter
import java.time.MonthDay;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor;
public class SDF {
public static void main(String[] args) {
final TemporalAccessor parse = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSxxx")
.parse("2020-06-13T16:21:15.239920+02:00");
int dayOfMonth = MonthDay.from(parse).getDayOfMonth();
System.out.println(dayOfMonth);
}
}
您的 date/time 字符串符合 DateTimeFormatter.ISO_OFFSET_DATE_TIME
。您可以使用 java.time
API 来获取月份中的第几天,如下所示:
import java.time.OffsetDateTime;
public class Main {
public static void main(String[] args) {
String dateTimeStr = "2020-06-13T16:21:15.239920+02:00";
OffsetDateTime odt = OffsetDateTime.parse(dateTimeStr);
int day = odt.getDayOfMonth();
System.out.println(day);
}
}
输出:
13
如果不能使用Java SE 8 Date and Time, check ThreeTenABP and also
如果您至少使用 API 级别 26,那么您可以使用 ZonedDateTime
class,因为您的字符串使用 class 可以理解的默认格式.
ZonedDateTime zdt = ZonedDateTime.parse("2020-06-13T16:21:15.239920+02:00");
int d = zdt.getDayOfMonth();
或者,如果格式不变,只需使用方法 substring()
String dd = "2020-06-13T16:21:15.239920+02:00".substring(8, 10);
如果格式不稳定,我建议 regular expression or combining ZonedDateTime
with DateTimeFormatter
应该有一个方法getDayOfMonth()
可用于此变量
private int parseDate(ZonedDateTime date) {
int day = date.getDayOfMonth();
return day;
}
您可以使用字符串拆分。只需将整个日期格式放入字符串中,然后创建一个 new String Array String[] array= str.split("[-T]");
然后你就可以从 array[2]
.[=13 中得到结果=]
String str = "2020-06-13T16:21:15.239920+02:00";
String[] array= str.split("[-T]");
System.out.println("OUTPUT: " + array[2]);
输出:13