Java 拆分日期/时间字符串

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

我有一个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();
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
  • ,解释得非常透彻

使用String.split方法。这将起作用,但Calendar.set需要整数。因此,应该使用Integer.parseInt(date1[x]);在set方法中。编辑:还注意到日历使用24小时时钟,因此您还需要根据time2[1]中的am/pm将time2[0]从12小时转换为24小时