有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android中的java日期格式日历

这就是它的写法,我想改变它的写法。我想在3月27日星期五用土耳其语写。在SimpleDataFormat中更改拼写时返回null。我正在打印从数据库中提取的数据

我想要的输出是:Cuma Mar 27(土耳其语)

数据库输出:

date ":" 2019-11-27 14: 42: 23.000000 "," timezone_type ": 3," timezone ":" UTC "

Android输出:

Fri Mar 27 14:42:23 GMT+03:00 2020

代码:

JSONObject form_tarih2 = jObj.getJSONObject("form_tarih2");
String date = form_tarih2.getString("date");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
        java.util.Locale.getDefault());
Date calculateDate = sdf.parse(date);
tarihstring = calculateDate;

SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
calendar.setTime(sdf.parse(String.valueOf(tarihstring)));

calendar.add(Calendar.MONTH,4);
Date future = calendar.getTime();

共 (2) 个答案

  1. # 1 楼答案

    爪哇。时间和时间

        DateTimeFormatter jsonDateFormatter
                = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss.SSSSSS");
        DateTimeFormatter turkishDateFormatter
                = DateTimeFormatter.ofPattern("EEEE MMM d", Locale.forLanguageTag("tr"));
        ZoneId zone = ZoneId.of("Europe/Istanbul");
    
        String dateFromJson = "2019-11-27 14:42:23.000000";
        String timezoneTypeFromJson = "3";
        String timezoneFromJson = "UTC";
    
        if (! timezoneTypeFromJson.equals("3")) {
            throw new IllegalStateException("This Stack Overflow answer only supports timezone_type 3");
        }
        LocalDateTime ldt = LocalDateTime.parse(dateFromJson, jsonDateFormatter);
        ZoneId jsonZone = ZoneId.of(timezoneFromJson);
        ZonedDateTime dateTime = ldt.atZone(jsonZone).withZoneSameInstant(zone);
        ZonedDateTime futureDateTime = dateTime.plusMonths(4);
        String wantedDateString = futureDateTime.format(turkishDateFormatter);
    
        System.out.println(wantedDateString);
    

    输出是所需的:

    Cuma Mar 27

    (3月27日星期五土耳其语)

    根据this answer时区,类型3实际上是指地区/城市形式的时区ID,例如欧洲/伦敦或Etc/UTCUTCEtc/UTC的别名,因此也适用

    如果您不希望结果出现在伊斯坦布尔时区,只需在代码中填写另一个

    SimpleDateFormat是出了名的麻烦,而且无法解析秒数为6位小数的日期时间字符串(它只支持3位小数)。它也早已过时Date和{}也设计得很差,而且早已过时。我使用的不是这些类,而是java。时间,现代Java日期和时间API

    或者使用内置的本地化格式

    你希望你的日期打印上星期几和年份。为此,您需要像我上面所做的那样手动指定格式。因此,对于其他读者来说,大多数情况下,内置格式是合适的,并且有两个潜在优势:它非常符合用户的期望,并且非常适合国际化。例如:

        DateTimeFormatter turkishDateFormatter = DateTimeFormatter
                .ofLocalizedDate(FormatStyle.LONG)
                .withLocale(Locale.forLanguageTag("tr"));
    

    27 Mart 2020 Cuma

    或更短:

        DateTimeFormatter turkishDateFormatter = DateTimeFormatter
                .ofLocalizedDate(FormatStyle.MEDIUM)
                .withLocale(Locale.forLanguageTag("tr"));
    

    27.Mar.2020

    问:java不是吗。需要Android API级别26的时间

    爪哇。时间在较旧和较新的Android设备上都能很好地工作。它至少需要Java6

    • 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
    • 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
    • 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类

    链接

  2. # 2 楼答案

    使用此选项可转换日期。将其设置为静态,以便在应用程序的任何位置使用

            String s=getFormatedTime("2019-11-27 14: 42: 23.000000","yyyy-MM-dd HH:mm:ss.SSSSSS","EEEE MMM dd");
    

    你的职能:

    public static String getFormatedTime(String dateStr, String strReadFormat, String strWriteFormat) {
        if (dateStr == null) return "";
        String formattedDate = dateStr;
    
        DateFormat readFormat = new SimpleDateFormat(strReadFormat, Locale.getDefault());
        DateFormat writeFormat = new SimpleDateFormat(strWriteFormat, new Locale("tr"));
    
        Date date = null;
    
        try {
            date = readFormat.parse(dateStr);
        } catch (ParseException e) {
        }
    
        if (date != null) {
            formattedDate = writeFormat.format(date);
        }
    
        return formattedDate;
    }
    

    您可以在结果中再添加4个月