Java 拆分日期/时间字符串
我有一个ReST服务,可以下载个人日历中的事件信息 当它返回日期和时间时,它将它们作为字符串返回 e、 g.date=“12/8/2012”和time=“11:25 am” 要将其放入android日历,我需要执行以下操作:Java 拆分日期/时间字符串,java,android,android-calendar,Java,Android,Android Calendar,我有一个ReST服务,可以下载个人日历中的事件信息 当它返回日期和时间时,它将它们作为字符串返回 e、 g.date=“12/8/2012”和time=“11:25 am” 要将其放入android日历,我需要执行以下操作: Calendar beginTime = Calendar.getInstance(); beginTime.set(year, month, day, hour, min); startMillis = beginTime.getTimeInMillis(); inten
Calendar beginTime = Calendar.getInstance();
beginTime.set(year, month, day, hour, min);
startMillis = beginTime.getTimeInMillis();
intent.put(Events.DTSTART, startMillis);
如何拆分日期和时间变量,以便它们在“beginTime.set()”方法中可用?您可以在此处看到拆分方法的示例:
然后简单地使用数组作为参数,例如:array[0]for year等。假设您以字符串格式获取日期(如果不是,则将其转换!),然后:
String date = "12/8/2012";
String[] dateParts = date.split("/");
String day = dateParts[0];
String month = dateParts[1];
同样,你也可以分割时间 试试这个:
String date = "12/8/2012";
String time = "11:25 am";
String[] date1 = date.split("/");
String[] time1 = time.split(":");
String[] time2 = time1[1].split(" "); // to remove am/pm
Calendar beginTime = Calendar.getInstance();
beginTime.set(Integer.parseInt(date1[2]), Integer.parseInt(date1[1]), Integer.parseInt(date1[0]), Integer.parseInt(time1[0]), Integer.parseInt(time2[0]));
startMillis = beginTime.getTimeInMillis();
intent.put(Events.DTSTART, startMillis);
希望这有帮助。使用
SimpleDateFormat
(查看api文档)。如果您提供正确的时间模式,它将能够立即将字符串转换为日期。我认为您并不需要如何分割字符串,在您的情况下,应该是“如何从日期字符串中获取毫秒时间”,下面是一个示例:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
String date = "12/8/2012";
String time = "11:25 am";
DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a");
try {
Date dt = df.parse(date + " " + time);
Calendar ca = Calendar.getInstance();
ca.setTime(dt);
System.out.println(ca.getTimeInMillis());
} catch (ParseException e) {
e.printStackTrace();
}
}
}
这只是一个想法,你可以做一些像这样的事情而不会分裂
DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm a");
Date date = formatter.parse("12/8/2012 11:25 am");
Calendar cal=Calendar.getInstance();
cal.setTime(date);
java.time,通过desugaring或ThreeTenABP
考虑使用java.time(现代java日期和时间API)进行日期和时间工作。使用java.time可以直接分别解析日期和时间的两个字符串,然后使用LoalDate.atTime()
将日期和时间组合成一个对象
从我读取代码的方式来看,从纪元开始算起,您实际上已经过了毫秒了。这就是我在第一段中给你们的。请随意将其拆开,只使用您需要的线路
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/M/u");
DateTimeFormatter timeFormatter = new DateTimeFormatterBuilder()
.parseCaseInsensitive()
.appendPattern("h:mm a")
.toFormatter(Locale.ENGLISH);
String dateString = "12/8/2012";
String timeString = "11:25 am";
LocalDate date = LocalDate.parse(dateString, dateFormatter);
LocalTime time = LocalTime.parse(timeString, timeFormatter);
long startMillis = date
.atTime(time)
.atZone(ZoneId.systemDefault())
.toInstant()
.toEpochMilli();
System.out.println(startMillis);
在我的时区(UTC偏移量+8月02:00)运行时,输出为:
1344763500000
对于需要从两个字符串中提取单个数字的人来说,获取这些数字也很简单。例如:
int year = date.getYear();
Month month = date.getMonth();
int monthNumber = date.getMonthValue();
int dayOfMonth = date.getDayOfMonth();
int hourOfDay = time.getHour();
int hourWithinAmOrPm = time.get(ChronoField.HOUR_OF_AMPM);
int minute = time.getMinute();
System.out.format("Year %d month %s or %d day %d hour %d or %d AM/PM minute %d%n",
year, month, monthNumber, dayOfMonth, hourOfDay, hourWithinAmOrPm, minute);
2012年8月或8日12小时上午11点或下午11点25分
问:java.time不需要Android API级别26吗?
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在较旧的Android上,可以使用desugaring或Android版本的ThreeTen Backport。它叫ThreeTenABP。在后一种情况下,请确保使用子包从
导入日期和时间类org.threeten.bp
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻