使用SimpleDateFormat问题将字符串转换为时间

时间:2018-05-21 12:41:55

标签: android simpledateformat

所以,我正在使用SimpleDateFormat将一个字符串“HH:MM AA”转换为“HH:MM”, 问题是我的代码在eclipse上工作得很好但是当我在Android Studio上运行时它显示错误的输出。这是我的两个代码。

Eclipse code

Android Studio code

4 个答案:

答案 0 :(得分:0)

试试这段代码..

 String date="2:30 PM";
    SimpleDateFormat sdf5 = new SimpleDateFormat("hh:mm aa");
    SimpleDateFormat sdf6 = new SimpleDateFormat("HH:mm");
    try {
        String str=sdf6.format(sdf5.parse(date));
        Log.d("DATE TO:",str);
    } catch (ParseException e) {
        e.printStackTrace();
    }

答案 1 :(得分:0)

问题是你使用“MM”作为分钟,但它应该是“mm”。 “MM”持续数月。

如果您希望恢复24小时值,则“HH”部分可以正常使用。

尝试这样的东西:

public static String getTimeFormatted(String time){
    String s = "";
    try{
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm aa", Locale.US);
        Date d = sdf.parse(time);


        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm", Locale.US);
        s = formatter.format(d);
    }
    catch(Exception ex){
        s = ex.getMessage();
    }
    return s;
}

答案 2 :(得分:0)

试试这个

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.cornicore.icccricketworldcup2019"
        minSdkVersion 17
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'com.android.support:design:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.google.firebase:firebase-core:15.0.2'
    implementation 'com.google.firebase:firebase-messaging:15.0.2'
    implementation 'com.google.firebase:firebase-database:15.0.1'
    implementation 'com.google.firebase:firebase-storage:15.0.2'
    implementation 'com.google.firebase:firebase-auth:15.1.0'
    implementation 'com.firebaseui:firebase-ui-database:3.2.2'
    implementation 'com.squareup.picasso:picasso:2.5.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

apply plugin: 'com.google.gms.google-services'

答案 3 :(得分:0)

java.time

    String newTimeString = LocalTime
            .parse("2:30 PM", DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH))
            .toString();
    System.out.println(newTimeString);

打印

  

14:30

即使在Android上,你也应该考虑不要与古老而臭名昭着的SimpleDateFormat课程作斗争。 java.time,现代Java日期和时间API,可以更好地使用。 LocalTime是一个没有约会且没有时区的时间,因此看起来非常符合您的要求。

问题:我可以在Android上使用java.time吗?

是的,java.time适用于较旧和较新的Android设备。它只需要至少Java 6

  • 在Java 8及更高版本和更新的Android设备上(来自API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参阅底部的链接)。
  • On(较旧)Android使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

您的代码出了什么问题?

  • 在您的第一个屏幕截图中,您使用格式模式进行格式化 字符串HH:mm。大写HH表示小时,小写mm表示 分钟。所以你得到了预期的14:30
  • 在您的第二个屏幕截图中,您使用了HH:MM,即大写MM。这是一个月。由于您解析的字符串中没有一个月,因此默认为1月,而结果在结果中呈现为01,因此您获得了14:01SimpleDateFormat非常典型的是它同意打印一个从未出现过的月份,只是假装一切都很好,并没有告诉你错误。这只是我建议你避免上课的众多原因之一。

链接