我有一个ReST服务,可以在个人日历中下载有关事件的信息......
当它返回日期和时间时,它将它们作为字符串
返回e.g。 date =“12/8/2012”&时间=“上午11:25”
要将其放入Android日历中,我需要执行以下操作:
Calendar beginTime = Calendar.getInstance();
beginTime.set(year, month, day, hour, min);
startMillis = beginTime.getTimeInMillis();
intent.put(Events.DTSTART, startMillis);
如何拆分日期和时间变量,以便它们在“beginTime.set()”方法中可用?
答案 0 :(得分:8)
我认为你真的不需要如何分割字符串,在你的情况下应该是'如何从日期字符串中获取时间,以毫秒为单位',这是一个例子:
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();
}
}
}
答案 1 :(得分:3)
试试这个:
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);
希望这有帮助。
答案 2 :(得分:2)
假设您以String格式获取日期(如果没有,请将其转换!)然后:
String date = "12/8/2012";
String[] dateParts = date.split("/");
String day = dateParts[0];
String month = dateParts[1];
同样,你也可以分时间!
答案 3 :(得分:0)
您可以在此处查看拆分方法的示例:How to split a string in Java
然后只需使用数组作为参数,例如:array [0]表示年份等等。
答案 4 :(得分:0)
使用SimpleDateFormat
(查看api文档)。如果您提供适当的时间模式,它将能够立即将字符串转换为日期。
答案 5 :(得分:0)
这只是一个想法,你可以做一些这样的事情而不分裂
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);
答案 6 :(得分:0)
考虑使用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);
在我的时区(8月的UTC偏移+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 AM / PM分钟25
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。