Android: 如何将字符串转换为日期?

每次用户启动应用程序时,我都将当前时间存储在数据库中。

Calendar c = Calendar.getInstance();
String str = c.getTime().toString();
Log.i("Current time", str);

在数据库端,我将当前时间存储为字符串(如上面的代码所示)。因此,当我从数据库加载它时,我需要将它强制转换为 Date 对象。我看到一些样本,他们都使用了“日期格式”。但我的格式与 Date 格式完全相同。因此,我认为没有必要使用“ DateFormat”。我说的对吗?

是否有任何办法直接强制转换此 String 到 Date 对象?我想将这段存储时间与当前时间进行比较。


更新

谢谢大家,我用了以下代码:

private boolean isPackageExpired(String date){
boolean isExpired=false;
Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");
if (new Date().after(expiredDate)) isExpired=true;
        

return isExpired;
}
    

private Date stringToDate(String aDate,String aFormat) {
    

if(aDate==null) return null;
ParsePosition pos = new ParsePosition(0);
SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat);
Date stringDate = simpledateformat.parse(aDate, pos);
return stringDate;
    

}
304805 次浏览
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

从字符串到日期

String dtStart = "2010-10-15T09:27:37Z";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = format.parse(dtStart);
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}

从日期到字符串

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
try {
Date date = new Date();
String dateTime = dateFormat.format(date);
System.out.println("Current Date Time : " + dateTime);
} catch (ParseException e) {
e.printStackTrace();
}

使用 SimpleDateFormat 或 DateFormat 类

例如:。

try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // here set the pattern as you date in string was containing like date/month/year
Date d = sdf.parse("20/12/2011");
}catch(ParseException ex){
// handle parsing exception if date string was different from the pattern applying into the SimpleDateFormat contructor
}

小心使用 c.getTime().toString();所依赖的语言环境可能是一个好主意。

一种方法是以秒为单位来存储时间(例如 UNIX 时间)。作为一个 int,您可以很容易地比较它,然后您只需将其转换为字符串时显示给用户。

String source = "24/10/17";


String[] sourceSplit= source.split("/");


int anno= Integer.parseInt(sourceSplit[2]);
int mese= Integer.parseInt(sourceSplit[1]);
int giorno= Integer.parseInt(sourceSplit[0]);


GregorianCalendar calendar = new GregorianCalendar();
calendar.set(anno,mese-1,giorno);
Date   data1= calendar.getTime();
SimpleDateFormat myFormat = new SimpleDateFormat("20yy-MM-dd");


String   dayFormatted= myFormat.format(data1);


System.out.println("data formattata,-->"+dayFormatted);
     import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyClass
{
public static void main(String args[])
{
SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");


String dateInString = "Wed Mar 14 15:30:00 EET 2018";


SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");




try {


Date date = formatter.parse(dateInString);
System.out.println(date);
System.out.println(formatterOut.format(date));


} catch (ParseException e) {
e.printStackTrace();
}
}
}

这里是您的 Date 对象 < strong > Date 输出是:

世界协调时2018年3月14日星期三13:30:00

在2018年3月14日获发

现在,您可以在 Android 中使用 java.time,可以使用 Android API Desugaring,也可以导入 31Ab

启用 java.time后,可以用更少的代码和更少的错误执行相同的操作。

假设您正在传递一个包含 ISO 标准格式的日期时间的 String,就像当前接受的答案一样。
然后下面的方法和它们在 main中的用法可能会告诉你如何从 String转换到 String:

public static void main(String[] args) {
String dtStart = "2010-10-15T09:27:37Z";
ZonedDateTime odt = convert(dtStart);
System.out.println(odt);
}

还有

public static void main(String[] args) {
String dtStart = "2010-10-15T09:27:37Z";
OffsetDateTime odt = convert(dtStart);
System.out.println(odt);
}

将打印行

2010-10-15T09:27:37Z

当有相应的方法时

public static OffsetDateTime convert(String datetime) {
return OffsetDateTime.parse(datetime);
}

或者

public static ZonedDateTime convert(String datetime) {
return ZonedDateTime.parse(datetime);
}

但是当然不是在同一个类中,这不会编译..。

还有一个 LocalDateTime,但它不能解析区域或偏移量。

如果您想使用自定义格式来解析或格式化输出,您可以使用 DateTimeFormatter,可能像这样:

public static void main(String[] args) {
String dtStart = "2010-10-15T09:27:37Z";
String converted = ZonedDateTime.parse(dtStart)
.format(DateTimeFormatter.ofPattern(
"EEE MMM d HH:mm:ss zz uuuu",
Locale.ENGLISH
)
);
System.out.println(converted);
}

它会输出

Fri Oct 15 09:27:37 Z 2010

对于 OffsetDateTime,你需要稍微调整一下模式:

public static void main(String[] args) {
String dtStart = "2010-10-15T09:27:37Z";
String converted = OffsetDateTime.parse(dtStart)
.format(DateTimeFormatter.ofPattern(
"EEE MMM d HH:mm:ss xxx uuuu",
Locale.ENGLISH
)
);
System.out.println(converted);
}

这将产生(略微)不同的产出:

Fri Oct 15 09:27:37 +00:00 2010

这是因为 ZonedDateTime考虑具有改变偏移量的命名时区(由于夏令时或其他类似情况) ,而 OffsetDateTime只考虑 知道与 UTC 的偏移量。