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

在Android中获得相同的小时数:分钟,android,datetime,calendar,Android,Datetime,Calendar,每次我尝试获取当前时间(我有一个按钮,让我们称之为“botonGuardarEstado”),我都会得到相同的小时和分钟。我注意到的是,我得到的时间就是我打开应用程序的时间。我的意思是,如果我在早上7:10打开应用程序,并在早上7:12按下按钮,我会在早上7:10。这是我的代码: DateFormat formatoFecha = new SimpleDateFormat("HH:mm dd/MM/yyyy"); String fecha = formatoFecha.format(Calend

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

DateFormat formatoFecha = new SimpleDateFormat("HH:mm dd/MM/yyyy");
String fecha = formatoFecha.format(Calendar.getInstance().getTime());
我没有得到像不同年份或类似的奇怪值,而且格式工作得很好,问题是我每次按下按钮都得到相同的小时数:分钟数。我一直在尝试不同的方法来获取日期和时间,比如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文件。其他所有数据(温度、湿度等)都是正确的。唯一引起麻烦的是日期(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);
不是约会时间的问题 您的代码如图所示是正确的

所以你的问题一定发生在你的应用程序的其他地方。可能您没有正确地将新字符串(
fecha
)馈送到用户界面。或者,您可能需要做一些事情来刷新新字符串值的显示。我们无法进一步帮助您,因为您没有提供其他代码

java.time 顺便说一下,您使用的是过时的类。旧的日期时间类已被证明是如此混乱和麻烦,已被框架所取代。看

  • Java8及更高版本:框架是内置的
  • Java7&6:使用
  • 安卓:用这个
Instant
是时间线上的一个时刻,分辨率高达

时区 应用时区()以获取一个时间间隔。如果省略时区,则会隐式应用JVM的当前默认时区。最好明确指定所需/预期的时区

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
生成字符串 您可以轻松地生成一个
字符串
,作为日期时间值的文本表示形式。您可以使用标准格式、自定义格式或自动本地化格式

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

String output = instant.toString();
2016-03-19T05:54:01.613Z

自定义格式 或者在类中指定您自己的特定格式模式

指定用于翻译日/月名称以及定义文化规范(如年、月和日期的顺序)的人类语言(英语等)的名称。请注意,
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.
不是约会时间的问题 您的代码如图所示是正确的

所以你的问题一定发生在你的应用程序的其他地方。可能您没有正确地将新字符串(
fecha
)馈送到用户界面。或者,您可能需要做一些事情来刷新新字符串值的显示。我们无法进一步帮助您,因为您没有提供其他代码

java.time 顺便说一下,您使用的是过时的类。旧的日期时间类已被证明是如此混乱和麻烦,已被框架所取代。看

  • Java8及更高版本:框架是内置的
  • Java7&6:使用
  • 安卓:用这个
Instant
是时间线上的一个时刻,分辨率高达

时区 应用时区()以获取一个时间间隔。如果省略时区,则会隐式应用JVM的当前默认时区。最好明确指定所需/预期的时区

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
生成字符串 您可以轻松地生成一个
字符串
,作为日期时间值的文本表示形式。您可以使用标准格式、自定义格式或自动本地化格式

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

String output = instant.toString();
2016-03-19T05:54:01.613Z

自定义格式 或者在类中指定您自己的特定格式模式

指定用于翻译日/月名称以及定义文化规范(如年、月和日期的顺序)的人类语言(英语等)的名称。请注意,
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.

可能重复的可能重复的可能重复的可能重复的可能重复的感谢,我更新我的问题,试图更具体。我会尝试使用即时通讯。我可以在ZoneDateTime中使用SimpleDateFormat吗?@LuisGarcia否,不要混合使用新旧日期时间类(转换数据除外)。使用
ZoneDateTime
使用该类生成字符串。我只是扩展了我的答案来解释更多。我尝试了whit Instant,但仍然给出了与我打开应用程序时相同的小时和分钟。我在22:20打开应用程序,等了1到2分钟才按下按钮(分别在22:21和22:22按下),但在这两种情况下我都得到了22:20。我将在问题中发布代码谢谢你的帮助,我已经发现了问题,这是我犯下的一个非常愚蠢的错误。我在onClick方法之外获取日期…@LuisGarcia使用或调用
System.out.println
应该会很快显示这种错误。谢谢,我更新了我的问题,试图更具体一些。我会尝试使用即时通讯。我可以在ZoneDateTime中使用SimpleDateFormat吗?@LuisGarcia不,不要混合使用新旧日期时间类(c除外)