拆分日期/时间字符串

时间:2013-08-07 09:12:13

标签: java android android-calendar

我有一个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()”方法中可用?

7 个答案:

答案 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,通过半途而废或通过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);

在我的时区(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 API级别26?

java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在较旧的Android上,请使用废除旧书或Android版本的ThreeTen Backport。称为ThreeTenABP。在后一种情况下,请确保使用子包从org.threeten.bp导入日期和时间类。

链接