[英]How to convert 24hr timestring to standard java Date vice versa?
我想有兩個功能:
假設我在字符串"11/12/2011"
有日期,時間在字符串中: "0200"
。 我想要一個簡單的函數(如果可能的話),它在java中將兩個參數(來自上面的日期和時間)轉換為Java Date
對象中的11/12/2011 2:00 AM。
假設我有一個java Date
對象作為唯一參數(例如11/12/2011 2:00 AM)從中返回軍事時間(例如“0200”)。
是否有一些java庫或者什么是實現上述目標的最佳方法? 或者是否有一些內置於Java Date中的東西可以讓你在軍事時間內輕松獲得Java日期使用的正常時間?
new SimpleDateFormat("MM/dd/yyyy HHmm").parse("11/12/2011" + " " + "0200");
new SimpleDateFormat("MM/dd/yyyy HHmm").format(new Date());
new SimpleDateFormat("HHmm").format(new Date());
(假設美國的軍隊仍然把月份放在第一個日期)。
[編輯:你也需要擔心你的時區 - 解析它通常最簡單地附加它。 例如:
new SimpleDateFormat("MM/dd/yyyy HHmm Z").parse("11/12/2011" + " " + "0200" + " PST");
(也許軍方總是使用UTC?我不知道......)。 對於格式化,您可以使用setTimezone()在SDF實例上設置時區。
您可以將SimpleDateFormat.parse與適當的格式字符串一起使用。
多數民眾贊成我是怎么做到的
public static String militaryToOrdinaryTime(int milTime)
{
int hour = milTime / 100;
int min = milTime % 100;
String period;
if (hour < 0 || hour > 24 || min < 0 || min > 59)
{
return "";
}
else if (hour > 12)
{
hour = hour - 12;
period = "pm";
}
else
{
period = "am";
}
if (hour == 0)
{
hour = 12;
}
else if (min == 0)
{
String ordTime = hour + " " + period;
return ordTime;
}
else if (min < 10 && min > 0)
{
String min1 = String.valueOf(min);
min1 = "0" + min1;
String ordTime = hour + ":" + min1 + " " + period;
return ordTime;
}
String ordTime = hour + ":" + min + " " + period;
return ordTime;
}
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int time = in.nextInt();
System.out.println(militaryToOrdinaryTime(time));
}
}
這就是我做的。
這是我的代碼:
import java.util.Scanner;
class test{
int h,m,s;
public static void main (String args[]){
int hour,min,sec;
String format;
Scanner obj=new Scanner(System.in);
hour=obj.nextInt();
min=obj.nextInt();
sec=obj.nextInt();
format=obj.next();
int h,m,s;
h=((hour>=00&&hour<24)?hour:0);
m=((min>=00&&min<60)?min:0);
s=((sec>=00&&sec<60)?sec:0);
if(format.equals("PM")){
h= (h!=12? 12+h :h);
}else if (h==12)h=0;
System.out.print(h+":"+m+":"+s);
}}
LocalDateTime ldt = LocalDateTime.of(
LocalDate.parse(
"11/12/2011" ,
DateTimeFormatter.ofPattern( "mm/DD/uuuu" )
)
,
LocalTime.parse(
"0200" ,
DateTimeFormatter.ofPattern( "HHmm" )
)
)
沒有“正常時間”和“軍事時間”這樣的東西。 這個星球上的大多數人都可以在12小時的休閑時間和24小時的時間內熟練掌握火車時刻表等重要事項。 “軍事時間”一詞主要用於美國,軍隊以外的人很少有24小時的時間。
避免麻煩的舊日期時間類,如java.util.Date
和.Calendar
。 現在取代了java.time類。
您有一個僅限日期的值和一個時間值,並且您希望將它們組合在一起。 所以首先建立每個部分。
LocalDate
類表示沒有時間且沒有時區的僅日期值。 同樣, LocalTime
類表示沒有日期且沒有時區的時間。
LocalDate
您可以指定顯式格式設置模式。
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern( "mm/DD/uuuu" ).withLocale( Locale.US );
LocalDate ld = LocalDate.parse( "11/12/2011" , dateFormatter );
ld.toString():2011-01-12
LocalTime
並為時間做同樣的事情。
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern( "HHmm" );
LocalTime lt = LocalTime.parse( "0200" , timeFormatter );
lt.toString():02:00
LocalDateTime
將這兩部分加入LocalDateTime
。
LocalDateTime ldt = LocalDateTime.of( ld , lt );
這LocalDateTime
並不代表實際的時刻,在時間軸上的一個點。 沒有偏離UTC或時區的上下文,此對象沒有實際意義。 新西蘭奧克蘭的凌晨2點,比加爾各答的凌晨2點早幾個小時,早於凌晨2點在巴黎FR,早些時候凌晨2點在加利福尼亞州蒙特利爾。
從LocalDateTime
,當您再次想要問題中所請求的僅限日期或僅限時間的LocalTime
時,您可以提取LocalDate
或LocalTime
。
LocalDate ld = ldt.toLocalDate();
LocalTime lt = ldt.toLocalTime();
ZonedDateTime
如果您知道此值的UTC偏移量 ,請應用ZoneOffset
以獲取OffsetDateTime
。 更好的是,使用時區(如果已知), ZonedId
可以獲得ZonedDateTime
。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );
zdt.toString():2011-01-12T02:00:00-05:00 [美國/蒙特利爾]
在ZonedDateTime
,當您再次想要問題中所請求的僅限日期或僅限時間的LocalTime
時,您可以提取LocalDate
或ZonedDateTime
。
LocalDate ld = zdt.toLocalDate();
LocalTime lt = zdt.toLocalTime();
最好避免像瘟疫這樣的java.util.Date
。 但是,如果必須使用尚未更新為java.time類型的舊代碼,則可以通過調用添加到舊類的新方法來轉換為/從java.time轉換。 從ZonedDateTime
您可以提取java.time.Instant
(UTC時間軸上的時刻)並將其提供給Date
上的靜態方法。
java.util.Date utilDate = java.util.Date.from( zdt.toInstant() );
有關更多轉換信息,請參閱將java.util.Date轉換為“java.time”類型? 。
java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊日期時間類,如java.util.Date
, .Calendar
和java.text.SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。
大部分的java.time功能后移植到Java 6和7 ThreeTen,反向移植 ,並進一步適應的Android在ThreeTenABP (見如何使用...... )。
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
試試JodaTime。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.