【发布时间】:2012-03-27 09:29:02
【问题描述】:
我有一个字符串
8/29/2011 11:16:12 AM。我想将该字符串拆分为单独的变量,例如
date = 8/29/2011
time = 11:16:12 AM
这可能吗?如果是这样,我该怎么做?
【问题讨论】:
-
当我得到这种字符串时,我正在减去它并创建一个 Date 对象。但也许有更简单的方法。
标签: java android datetime split
我有一个字符串
8/29/2011 11:16:12 AM。我想将该字符串拆分为单独的变量,例如
date = 8/29/2011
time = 11:16:12 AM
这可能吗?如果是这样,我该怎么做?
【问题讨论】:
标签: java android datetime split
(编辑:请参阅下面的Answer by Ole V.V.,了解第一个版本的更现代(Java 8)方法)
一种方法是将其解析为日期对象并重新格式化:
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));
【讨论】:
为什么不使用 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);
它提供了更多的工作/代码,但这是正确的方法。
【讨论】:
是时候有人为这个问题提供现代答案了。我在这里。
不过,我对您的要求并不完全满意。对于绝大多数目的和情况,您不应将日期或时间保存在字符串中。您应该使用正确的日期时间对象。所以在我看来,这就是你应该做的:
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 设备上都能很好地工作。它只需要至少 Java 6。
org.threeten.bp 导入日期和时间类以及子包。java.time。java.time 的反向移植到 Java 6 和 7(JSR-310 的 ThreeTen)。【讨论】:
试试这个:
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
【讨论】:
String str = "8/29/2011 11:16:12 AM"
String date = str.subString(0, str.indexOf(' '));
String time = str.subString(str.indexOf(' ')+1);
【讨论】:
试试 Java 中的split 函数:
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" 这样的可变字符串
【讨论】:
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
【讨论】:
您可以通过将字符串拆分为两个子字符串来做到这一点,如下所示
String main = "8/29/2011 11:16:12 AM";
String s[] = main.split(" ",2);
String date = s[0];
String time = s[1];
注意: split 方法会将字符串拆分为第二个参数中提到的两部分。
【讨论】: