获得相同的时间:Android中的分钟数

时间:2016-03-23 01:13:22

标签: android datetime calendar

每次我尝试获取当前时间(我有一个按钮,我们称之为“botonGuardarEstado”)我得到相同的时间和分钟。我所注意到的是,我得到的时间是我打开应用程序的时间。我的意思是,如果我在上午7:10打开应用程序并在上午7:12按下按钮,我会在上午7:10到达。这是我的代码:

DateFormat formatoFecha = new SimpleDateFormat("HH:mm dd/MM/yyyy");
String fecha = formatoFecha.format(Calendar.getInstance().getTime());

我没有像不同年份或类似的东西那样获得奇怪的价值,并且格式运作良好,问题是我得到相同的时间:每次按下按钮时分钟。我alredy尝试了不同的获取日期和时间的方法,比如Date(),甚至只使用类似的东西获得小时和分钟

Calendar cal = Calendar.getInstance();
int mins = cal.get(Calendar.MINUTE);

但仍然有相同的值。

我有以下课程

private class InfoArchivo {
    String temperatura, humedad, gas, humo, iluminacion, riego, ventilacion, fecha;

    public InfoArchivo(String temperatura, String humedad, String gas, String humo, String iluminacion, String riego, String ventilacion, String fecha){
        this.temperatura = temperatura;
        this.humedad = humedad;
        this.gas = gas;
        this.humo = humo;
        this.iluminacion = iluminacion;
        this.riego = riego;
        this.fecha = fecha;

        if(!ventilacion.equals("0"))
            this.ventilacion = "1";
        else
            this.ventilacion = "0";
    }

我有一个该类的实例数组。我想要做的是使用该数组编写一个csv文件。其他所有数据(温度,humedad等)都是正确的。唯一引起麻烦的是日期(fecha)。完成csv文件的创建,直到我按下另一个按钮。当我按下botonGuardarEstado按钮我得到日期时,创建一个InfoArchivo类的实例并将其添加到数组

编辑:也试过这个但仍然有同样的问题:

Instant instant = Instant.now();
        ZoneId zoneId = ZoneId.of("America/Guatemala");
        ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, zoneId);
        DateTimeFormatter formato = DateTimeFormatter.ofPattern("HH:mm dd/MM/yyyy");
        String fecha = zdt.format(formato);

1 个答案:

答案 0 :(得分:0)

不是日期时间问题

您显示的代码是正确的。

因此,您的问题必定会在您应用的其他位置发生。也许您没有正确地将新String(fecha)提供给用户界面。或者您可能需要做一些事情来刷新新String值的显示。我们无法帮助您,因为您没有提供其他代码。

java.time

顺便说一下,你正在使用过时的类。已被证明如此混乱和麻烦的旧日期时间类已被java.time框架取代。请参阅Oracle Tutorial

Instant

InstantUTC中时间轴上的一个时刻,分辨率最高为nanoseconds

 Instant instant = Instant.now(); // Current moment in UTC.

时区

应用时区(ZoneId)以获得ZonedDateTime。如果省略时区,则会隐式应用JVM的当前默认时区。最好明确指定期望/预期的时区。

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

生成字符串

您可以轻松生成String作为日期时间值的文本表示。您可以使用标准格式,自己的自定义格式或自动本地化格式。

ISO 8601

您可以调用toString方法,使用通用且合理的ISO 8601标准格式化文本。

String output = instant.toString();
  

2016-03-19T05:54:01.613Z

自定义格式

或者使用DateTimeFormatter类指定您自己的特定格式模式。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

为人类语言(英语,Locale等)指定French,用于翻译日/月的名称,以及定义文化规范,例如年和月的顺序和日期。请注意,Locale与时区无关。

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

本地化

更好的是,让java.time自动完成本地化工作。

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.