如何从日期时间戳获取时间和日期

时间:2012-03-27 09:29:03

标签: java android datetime

我有1个字符串 8/29/2011 11:16:12 AM我想保存在日期= 8/29/2011和时间= 11:16:12 AM的变量

怎么可能? 你能举个例子吗?

8 个答案:

答案 0 :(得分:25)

一种方法是将其解析为日期对象并重新格式化:

    try {
        DateFormat f = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
        Date d = f.parse("8/29/2011 11:16:12 AM");
        DateFormat date = new SimpleDateFormat("MM/dd/yyyy");
        DateFormat time = new SimpleDateFormat("hh:mm:ss a");
        System.out.println("Date: " + date.format(d));
        System.out.println("Time: " + time.format(d));
    } catch (ParseException e) {
        e.printStackTrace();
    }

如果您只想将其分成日期时间片段,只需使用split来获取片段

    String date = "8/29/2011 11:16:12 AM";
    String[] parts = date.split(" ");
    System.out.println("Date: " + parts[0]);
    System.out.println("Time: " + parts[1] + " " + parts[2]);

    String date = "8/29/2011 11:16:12 AM";
    System.out.println("Date: " + date.substring(0, date.indexOf(' ')));
    System.out.println("Time: " + date.substring(date.indexOf(' ') + 1));

答案 1 :(得分:2)

java.time,现代Java日期和时间API和ThreeTenABP

是时候有人提供这个问题的现代答案了。我在这里。

不过,我不能完全满足您的要求。对于绝大多数目的和情况,您不应该将日期和时间保持一致。您应该使用正确的日期时间对象。因此,正如我所看到的,这就是您应该要做的:

    LocalDateTime dateTime = LocalDateTime.of(2011, Month.AUGUST, 29, 11, 16, 12);
    LocalDate date = dateTime.toLocalDate();
    LocalTime time = dateTime.toLocalTime();
    System.out.println("date = " + date);
    System.out.println("time = " + time);

输出为:

date = 2011-08-29
time = 11:16:12

假设已经输入8/29/2011 11:16:12 AM作为用户输入,则需要将其解析为一个LocalDateTime,您可以将其保留在程序中。就像这样:

    DateTimeFormatter formatter
            = DateTimeFormatter.ofPattern("M/d/u h:m:s a", Locale.ENGLISH);
    String userInput = "8/29/2011 11:16:12 AM";
    LocalDateTime dateTime = LocalDateTime.parse(userInput, formatter);
    System.out.println("dateTime = " + dateTime);
dateTime = 2011-08-29T11:16:12

反之,则输出给用户:如果您单独的日期和时间字符串仅用于输出,则在格式化成这些字符串之前,我们不需要分开日期和时间。我们可以直接格式化LocalDateTime

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/u");
    DateTimeFormatter timeFormatter
            = DateTimeFormatter.ofPattern("h:mm:ss a", Locale.ENGLISH);
    String dateString = dateTime.format(dateFormatter);
    String timeString = dateTime.format(timeFormatter);
    System.out.println("dateString = " + dateString);
    System.out.println("timeString = " + timeString);
dateString = 8/29/2011
timeString = 11:16:12 AM

问题:java.time是否不需要Android API级别26?

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

  • 在Java 8和更高版本以及更新的Android设备(API级别26以上)中,内置了现代API。
  • 在非Android Java 6和7中,获得ThreeTen Backport,这是现代类的backport(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android上,使用Android版本的ThreeTen Backport。叫做ThreeTenABP。并确保您使用子包从org.threeten.bp导入日期和时间类。

链接

答案 2 :(得分:1)

试试这个,

String main = "8/29/2011 11:16:12 AM";
        String[] tmp;
        String date, time;

        tmp = main.split(" ");

        // [0] = 8/29/2011
        // [1] = 11:16:12
        // [2] = AM

        date = tmp[0].toString(); // 8/29/2011
        time = tmp[1].toString() + " " + tmp[2].toString(); // 11:16:12 AM

...谢谢

答案 3 :(得分:1)

String str = "8/29/2011 11:16:12 AM"
String date = str.subString(0, str.indexOf(' '));
String time  = str.subString(str.indexOf(' ')+1);

希望它会对你有所帮助。 :)

答案 4 :(得分:1)

mDate = new Date();
DateFormat timeFormat = SimpleDateFormat.getTimeInstance();
DateFormat dateFormat = SimpleDateFormat.getDateInstance();
timeFormat.format(mDate); // formats to: 4:53:03 AM
dateFormat.format(mDate); // formats to: Oct 16, 2014

答案 5 :(得分:0)

在java下面的代码中尝试拆分函数:

String my_string="8/29/2011 11:16:12 AM"
String [] my_date_time = null;
my_date_time = my_string.split(" ");
String Date_str=my_date_time[0];
String Time_str=my_date_time[1]+" "+my_date_time[2];

你得到像这样的变量字符串Date_str =“8/29/2011”和Time_str =“11:16:12 AM”

答案 6 :(得分:0)

您可以通过将字符串拆分为两个子字符串来实现,如下所示

String main = "8/29/2011 11:16:12 AM";
String s[] = main.split(" ",2);
String date = s[0];
String time = s[1];

注意:splite方法会将字符串拆分为两部分,如第二个参数中所述。

答案 7 :(得分:0)

为什么不使用DateFormat?

检查http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html

String str = "8/29/2011 11:16:12 AM";

String fmt = "MM/dd/yyyy HH:mm:ss a";
DateFormat df = new SimpleDateFormat(fmt);

Date dt = df.parse(str);

DateFormat tdf = new SimpleDateFormat("HH:mm:ss a");
DateFormat dfmt  = new SimpleDateFormat("MM/dd/yyyy");


String timeOnly = tdf.format(dt);
String dateOnly = dfmt.format(dt);

它提供了更多的工作/代码,但这是正确的方法。