我正在添加这个问题,因为我是Java和Android的新手,我搜索了几个小时试图解决这个问题.答案来自相关答案的组合,所以我想我会记录我为其他可能正在努力的人学到的东西.见答案.
对于一些背景知识,我的经验主要是PHP的Web开发和一点Ruby.我唯一的操作系统是Linux(Ubuntu Studio),我(不情愿地)在Android Studio 2.1.2中开发我的第一个Android应用程序.我的Java设置如下:
>java -version
> openjdk version "1.8.0_91"
> OpenJDK Runtime Environment (build 1.8.0_91-8u91-b14-3ubuntu1~15.10.1-b14)
> OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
Run Code Online (Sandbox Code Playgroud) datetime android android-gradle-plugin threetenbp threetenabp
我想从Hijri日期索引中得到一个格里高利日期.
例如
getDate(1436, "SHawwal", 18)
Run Code Online (Sandbox Code Playgroud)
这应该回来了
3rd August 2015
Run Code Online (Sandbox Code Playgroud)
我怎么能进行转换?
所以我在解析日期时遇到了问题,使用了JodaTime年表,IslamicChronology所以写了一个小例子来演示我的问题.
这是代码:
import org.joda.time.Chronology;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.chrono.IslamicChronology;
import java.util.Date;
/**
* Test
*/
public class Test
{
public static void main(String[] args)
{
Date now = new Date();
String format = "dd MMM yyyy";
Chronology calendarSystem = IslamicChronology.getInstance();
DateTimeFormatter formatter = DateTimeFormat.forPattern(format).withChronology(calendarSystem);
String nowAsString = formatter.print(now.getTime());
System.out.println("nowAsString = " + nowAsString);
long parsedNowTs = formatter.parseMillis(nowAsString);
String parsedNowTsAsString = formatter.print(parsedNowTs);
}
}
Run Code Online (Sandbox Code Playgroud)
并输出:
nowAsString = 16 10 1430
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "16 …Run Code Online (Sandbox Code Playgroud) android ×2
date ×2
java ×2
datetime ×1
hijri ×1
jodatime ×1
parsing ×1
threetenabp ×1
threetenbp ×1