将长字符串转换为日期

时间:2012-08-01 05:58:53

标签: android date

我从DB获取日期值为值。我将其转换为字符串以使用解析函数。以下是我的代码

 Date date1 = new SimpleDateFormat("MM/dd/yyyy").parse(strDate1);

但是当执行此代码时应用程序崩溃。如果

,将成功执行
strDate1="12/30/2012".

但我将此值设为“ 12302012235 ”(pzudo值)。

我该怎么做?

编辑

我将日期值保存为DB为INTEGER。从DB我得到这个值并转换为string.this是实际的strDate1值

strDate1="1346524199000"

7 个答案:

答案 0 :(得分:5)

尝试以下代码段:

        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(Long.parseLong(val));         
        Date d = (Date) c.getTime();        
        SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");       
        String time = format.format(d);//this variable time contains the time in the format of "day/month/year".    

答案 1 :(得分:2)

试试这个,

SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
    Date dateD=new Date();
    dateD.setTime(LongTime);
    date=dateFormat.format(dateD);

答案 2 :(得分:1)

Java 8 ,按给定的日期格式模式将毫秒转换为Date作为String。如果你有一个很长的毫秒,并希望在指定时区和模式时将它们转换为日期字符串,那么你可以使用它: -

dateInMs 是DateTime的长值。

DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                    .format(Instant.ofEpochMilli(dateInMs).atZone(ZoneId.of("Europe/London")))

答案 3 :(得分:1)

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API*

使用现代日期时间 API:

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        long input = 12302012235L;

        // Get Instant from input
        Instant instant = Instant.ofEpochMilli(input);
        System.out.println(instant);

        // Convert Instant to ZonedDateTime by applying time-zone
        // Change ZoneId as applicable e.g. ZoneId.of("Asia/Dubai")
        ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
        System.out.println(zdt);

        // Format ZonedDateTime as desired
        // Check https://stackoverflow.com/a/65928023/10819573 to learn more about 'u'
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/uuuu", Locale.ENGLISH);
        String formatted = dtf.format(zdt);
        System.out.println(formatted);

        // If at all, you need java.util.Date
        Date date = Date.from(instant);
    }
}

输出:

1970-05-23T09:13:32.235Z
1970-05-23T10:13:32.235+01:00[Europe/London]
05/23/1970

Trail: Date Time 了解有关现代日期时间 API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

答案 4 :(得分:0)

试试这个

Date date1 = new SimpleDateFormat("MMddyyyySSS").parse(strDate1);

希望它适用于12302012235,但我认为235是毫秒。

答案 5 :(得分:0)

您可以尝试以下代码:

private Date getGMTDate(long date) {
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat(
            "yyyy-MMM-dd HH:mm:ss");
    dateFormatGmt.setTimeZone(TimeZone.getTimeZone("GMT"));
    SimpleDateFormat dateFormatLocal = new SimpleDateFormat(
            "yyyy-MMM-dd HH:mm:ss");

    Date temp = new Date(date);

    try {
        return dateFormatLocal.parse(dateFormatGmt.format(temp));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return temp;
}  

我希望这会对你有所帮助。

答案 6 :(得分:0)

我得到了答案。实际上我想将字符串转换为日期仅用于比较values.since我得到的值只要我直接使用compareTo函数来执行此操作。允许将long转换为字符串和字符串到目前为止转换。谢谢大家的支持。