我想将格里高利日期(我们通常在美国使用的日期)转换为希伯来语(犹太日期)。我正在使用Adobe Flash CS5作为Adobe AIR应用程序。是否有一些已在ActionScript 3.0上开发的代码?
经过一段时间的研究后,我发现在Visual Studio上创建的Windows应用程序具有满足此类需求的内置函数。有没有办法在Windows窗体上调用函数或AIR中的某些东西?
最佳, 卢卡斯
答案 0 :(得分:5)
不幸的是,在搜索之后,我找不到任何图书馆或任何东西来获取闪光灯中的希伯来日期。但是,我找到了这个网站:
http://www.hebcal.com/converter/?gd=21&gm=6&gy=2011&g2h=Convert+Gregorian+to+Hebrew+date
看来hebcal.com接受URL中GET变量中的格里高利日期,并返回正确的希伯来日期。 因此,理论上你可以使用flash URLLoader来加载由你当前的gregorian日期组成的URL,然后在请求响应中解析HTML数据以提取希伯来日期。
我继续使用网络服务hebcal.com找出了如何为你做这件事。以下是完成此任务的actionscript 3代码:
import flash.net.URLLoader;
import flash.events.Event;
import flash.net.URLRequest;
var currentDate:Date = new Date();
var dateLoader:URLLoader = new URLLoader();
var dateQueryURL:String = 'http://www.hebcal.com/converter/?gd=' + currentDate.date + '&gm=' + (currentDate.month+1) + '&gy=' + currentDate.fullYear + '&g2h=Convert+Gregorian+to+Hebrew+date';
trace(dateQueryURL);
dateLoader.addEventListener(Event.COMPLETE, onDateConverted);
dateLoader.load(new URLRequest(dateQueryURL));
var hebrewDateSearchRegexp:RegExp = /([a-zA-Z0-9 ,]{1,30})(?=<\/b)/gixm;
function onDateConverted(e:Event):void
{
var queryResult:String = e.currentTarget.data as String;
var hebrewDate:String;
var dateArr:Array = queryResult.match(hebrewDateSearchRegexp);
if(dateArr && dateArr.length > 0){
//The date was found in the string
hebrewDate = dateArr[0];
trace("The current Hebrew date is: " + hebrewDate);
}else{
trace("Error retrieving current Hebrew date.");
}
}
所以基本上我只使用一个正则表达式来查找/选择只包含希伯来语日期的HTML部分。然后我使用string.match()提取它并在trace语句中输出它。
另请注意,使用currentDate.month,我必须将此值递增1,因为flash会将月份从0到11计算,而hebcal.com上的工具则从1-12开始计算。
答案 1 :(得分:1)
我不确定adobe产品,但由于你的问题用C#标记(这对我来说很奇怪),我会提供一个C#ex。非常有效地完成它的方法:
/// <summary>
/// Converts a gregorian date to its hebrew date string representation,
/// using custom DateTime format string.
/// </summary>
/// <param name="value">The <see cref="DateTime"/> value to convert.</param>
/// <param name="format">A standard or custom date-time format string.</param>
public static string ToJewishDateString(this DateTime value, string format)
{
var ci = CultureInfo.CreateSpecificCulture("he-IL");
ci.DateTimeFormat.Calendar = new HebrewCalendar();
return value.ToString(format, ci);
}