2

我从数据库中获取日期值作为值。我将其转换为字符串以使用解析函数。下面给出的是我的代码

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

但是在执行此代码时应用程序会崩溃。如果执行此代码,它将成功执行

strDate1="12/30/2012".

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

我怎样才能做到这一点?

编辑:

我将日期值作为 INTEGER 保存到 DB。从数据库我得到这个值并转换为字符串。这是实际的 strDate1 值

strDate1="1346524199000"
4

7 回答 7

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".    
于 2013-11-20T12:33:34.720 回答
2

尝试这个,

SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd");
    Date dateD=new Date();
    dateD.setTime(LongTime);
    date=dateFormat.format(dateD);
于 2012-08-01T06:36:06.273 回答
2

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

dateInMs是 DateTime 的长值。

DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
                    .format(Instant.ofEpochMilli(dateInMs).atZone(ZoneId.of("Europe/London")))
于 2016-08-26T10:39:42.743 回答
1

您可以尝试以下代码:

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;
}  

我希望这能帮到您。

于 2012-08-01T06:13:19.327 回答
1

java.time

java.util日期时间 API 及其格式化 API已SimpleDateFormat过时且容易出错。建议完全停止使用它们并切换到现代日期时间 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 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-04-05T10:45:01.377 回答
0

尝试这个

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

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

于 2012-08-01T06:04:31.200 回答
0

我得到了答案。实际上,我只想将字符串转换为日期以比较值。因为只要我直接使用 compareTo 函数来执行此操作,我就会得到值。避免将 long 转换为 string 和 string 到 date 的转换.谢谢大家的支持。

于 2012-08-01T08:34:23.210 回答